| package org.eclipse.epf.library.realization.impl; |
| |
| import java.util.ArrayList; |
| import java.util.HashSet; |
| import java.util.List; |
| import java.util.Set; |
| |
| import org.eclipse.emf.ecore.EReference; |
| import org.eclipse.emf.ecore.EStructuralFeature; |
| import org.eclipse.epf.library.configuration.ConfigurationHelper; |
| import org.eclipse.epf.library.configuration.DefaultElementRealizer; |
| import org.eclipse.epf.library.configuration.ElementRealizer; |
| import org.eclipse.epf.library.edit.realization.IRealizedTaskDescriptor; |
| import org.eclipse.epf.uma.Descriptor; |
| import org.eclipse.epf.uma.MethodElement; |
| import org.eclipse.epf.uma.RoleDescriptor; |
| import org.eclipse.epf.uma.Section; |
| import org.eclipse.epf.uma.TaskDescriptor; |
| import org.eclipse.epf.uma.UmaPackage; |
| import org.eclipse.epf.uma.WorkProductDescriptor; |
| |
| public class RealizedTaskDescriptor extends RealizedDescriptor implements |
| IRealizedTaskDescriptor { |
| |
| private static Set<EStructuralFeature> featureSet = new HashSet<EStructuralFeature>(); |
| static { |
| UmaPackage up = UmaPackage.eINSTANCE; |
| featureSet.add(up.getTaskDescriptor_PerformedPrimarilyBy()); |
| featureSet.add(up.getTaskDescriptor_MandatoryInput()); |
| featureSet.add(up.getTaskDescriptor_AdditionallyPerformedBy()); |
| featureSet.add(up.getTaskDescriptor_Output()); |
| featureSet.add(up.getTaskDescriptor_SelectedSteps()); |
| |
| } |
| |
| public RealizedTaskDescriptor(TaskDescriptor td) { |
| super(td); |
| } |
| |
| public boolean handleFeature(EStructuralFeature feature) { |
| if (featureSet.contains(feature)) { |
| return true; |
| } |
| return super.handleFeature(feature); |
| } |
| |
| public Object getFeatureValue(EStructuralFeature feature) { |
| UmaPackage up = UmaPackage.eINSTANCE; |
| if (feature == up.getTaskDescriptor_PerformedPrimarilyBy()) { |
| return getPerformedPrimarilyBy(); |
| } |
| if (feature == up.getTaskDescriptor_MandatoryInput()) { |
| return getMandatoryInput(); |
| } |
| if (feature == up.getTaskDescriptor_AdditionallyPerformedBy()) { |
| return getAdditionallyPerformedBy(); |
| } |
| if (feature == up.getTaskDescriptor_Output()) { |
| return getOutput(); |
| } |
| if (feature == up.getTaskDescriptor_SelectedSteps()) { |
| return getSelectedSteps(); |
| } |
| |
| return super.getFeatureValue(feature); |
| } |
| |
| public List<RoleDescriptor> getPerformedPrimarilyBy() { |
| UmaPackage up = UmaPackage.eINSTANCE; |
| EReference tdReference = up.getTaskDescriptor_PerformedPrimarilyBy(); |
| List<RoleDescriptor> rdList = (List<RoleDescriptor>) getCachedValue(tdReference); |
| if (rdList == null) { |
| EReference[] tdFeatures = { tdReference, |
| up.getTaskDescriptor_PerformedPrimarilyByExcluded(), }; |
| rdList = (List<RoleDescriptor>) getDescriptorList(up |
| .getTask_PerformedBy(), tdFeatures); |
| storeCachedValue(tdReference, rdList); |
| } |
| return rdList; |
| } |
| |
| public List<RoleDescriptor> getAdditionallyPerformedBy() { |
| UmaPackage up = UmaPackage.eINSTANCE; |
| EReference tdReference = up.getTaskDescriptor_AdditionallyPerformedBy(); |
| List<RoleDescriptor> rdList = (List<RoleDescriptor>) getCachedValue(tdReference); |
| if (rdList == null) { |
| EReference[] tdFeatures = { tdReference, |
| up.getTaskDescriptor_AdditionallyPerformedByExclude(),}; |
| rdList = (List<RoleDescriptor>) getDescriptorList(up |
| .getTask_AdditionallyPerformedBy(), tdFeatures); |
| storeCachedValue(tdReference, rdList); |
| } |
| return rdList; |
| } |
| |
| public List<WorkProductDescriptor> getMandatoryInput() { |
| UmaPackage up = UmaPackage.eINSTANCE; |
| EReference tdReference = up.getTaskDescriptor_MandatoryInput(); |
| List<WorkProductDescriptor> wpdList = (List<WorkProductDescriptor>) getCachedValue(tdReference); |
| if (wpdList == null) { |
| EReference[] tdFeatures = { tdReference, |
| up.getTaskDescriptor_MandatoryInputExclude(),}; |
| wpdList = (List<WorkProductDescriptor>) getDescriptorList(up |
| .getTask_MandatoryInput(), tdFeatures); |
| storeCachedValue(tdReference, wpdList); |
| } |
| markWpdsReferenced(wpdList); |
| return wpdList; |
| } |
| |
| public List<WorkProductDescriptor> getOptionalInput() { |
| UmaPackage up = UmaPackage.eINSTANCE; |
| EReference tdReference = up.getTaskDescriptor_OptionalInput(); |
| List<WorkProductDescriptor> wpdList = (List<WorkProductDescriptor>) getCachedValue(tdReference); |
| if (wpdList == null) { |
| EReference[] tdFeatures = { tdReference, |
| up.getTaskDescriptor_OptionalInputExclude(), }; |
| wpdList = (List<WorkProductDescriptor>) getDescriptorList(up |
| .getTask_OptionalInput(), tdFeatures); |
| storeCachedValue(tdReference, wpdList); |
| } |
| markWpdsReferenced(wpdList); |
| return wpdList; |
| } |
| |
| public List<Section> getSelectedSteps() { |
| UmaPackage up = UmaPackage.eINSTANCE; |
| EReference dFeature = up.getTaskDescriptor_SelectedSteps(); |
| |
| List<Section> stepList = (List<Section>) getCachedValue(dFeature); |
| if (stepList == null) { |
| stepList = calculateSelectedSteps(); |
| } |
| return stepList; |
| } |
| |
| private List<Section> calculateSelectedSteps() { |
| UmaPackage up = UmaPackage.eINSTANCE; |
| EReference dFeature = up.getTaskDescriptor_SelectedSteps(); |
| EReference dFeatureExclude = up.getTaskDescriptor_SelectedStepsExclude(); |
| EReference elementFeature = up.getTask_Steps(); |
| |
| ElementRealizer realizer = DefaultElementRealizer |
| .newElementRealizer(getConfig()); |
| MethodElement element = getLinkedElement(); |
| if (element == null) { |
| return ConfigurationHelper.calc0nFeatureValue(getDescriptor(), |
| dFeature, realizer); |
| } |
| List<Section> elementStepList = ConfigurationHelper.calc0nFeatureValue(element, |
| elementFeature, realizer); |
| if (elementStepList == null) { |
| elementStepList = new ArrayList<Section>(); |
| } |
| |
| if (!elementStepList.isEmpty()) { |
| Set<MethodElement> excludeElements = getExcludeOrAddtionalRefSet( |
| getDescriptor(), up.getTaskDescriptor_SelectedStepsExclude(), realizer); |
| if (excludeElements != null && ! excludeElements.isEmpty()) { |
| elementStepList.removeAll(excludeElements); |
| } |
| } |
| boolean same = true; |
| List<Section> valueList = ((TaskDescriptor) getDescriptor()).getSelectedSteps(); |
| if (elementStepList.size() == valueList.size()) { |
| for (int i = 0; i < valueList.size(); i++) { |
| if (valueList.get(i) != elementStepList.get(i)) { |
| same = false; |
| break; |
| } |
| } |
| } else { |
| same = false; |
| } |
| |
| if (! same) { |
| valueList.clear(); |
| if (! elementStepList.isEmpty()) { |
| valueList.addAll(elementStepList); |
| } |
| } |
| |
| return valueList; |
| } |
| |
| public List<WorkProductDescriptor> getOutput() { |
| UmaPackage up = UmaPackage.eINSTANCE; |
| EReference tdReference = up.getTaskDescriptor_Output(); |
| List<WorkProductDescriptor> wpdList = (List<WorkProductDescriptor>) getCachedValue(tdReference); |
| if (wpdList == null) { |
| EReference[] tdFeatures = { tdReference, |
| up.getTaskDescriptor_OutputExclude(), }; |
| wpdList = (List<WorkProductDescriptor>) getDescriptorList(up |
| .getTask_Output(), tdFeatures); |
| storeCachedValue(tdReference, wpdList); |
| } |
| markWpdsReferenced(wpdList); |
| return wpdList; |
| } |
| |
| protected MethodElement getRawLinkedElement() { |
| return getTaskDescriptor().getTask(); |
| } |
| |
| private TaskDescriptor getTaskDescriptor() { |
| return (TaskDescriptor) getElement(); |
| } |
| |
| @Override |
| public Set<Descriptor> updateAndGetAllReferenced() { |
| Set<Descriptor> referenced = new HashSet<Descriptor>(); |
| addToSet(referenced, getPerformedPrimarilyBy()); |
| addToSet(referenced, getMandatoryInput()); |
| addToSet(referenced, getAdditionallyPerformedBy()); |
| addToSet(referenced, getOptionalInput()); |
| addToSet(referenced, getOutput()); |
| |
| getSelectedSteps(); |
| |
| Set<Descriptor> superSet = super.updateAndGetAllReferenced(); |
| referenced.addAll(superSet); |
| return referenced; |
| } |
| |
| } |