| //------------------------------------------------------------------------------ |
| // 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.process; |
| |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.Iterator; |
| import java.util.List; |
| |
| import org.eclipse.emf.common.command.Command; |
| import org.eclipse.emf.common.notify.AdapterFactory; |
| import org.eclipse.emf.edit.domain.EditingDomain; |
| import org.eclipse.emf.edit.provider.Disposable; |
| import org.eclipse.emf.edit.provider.ITreeItemContentProvider; |
| import org.eclipse.emf.edit.provider.IWrapperItemProvider; |
| import org.eclipse.epf.library.edit.command.IResourceAwareCommand; |
| import org.eclipse.epf.library.edit.process.command.OBSDragAndDropCommand; |
| import org.eclipse.epf.library.edit.process.command.OBSDropCommand; |
| import org.eclipse.epf.library.edit.util.ProcessUtil; |
| import org.eclipse.epf.library.edit.util.TngUtil; |
| |
| import com.ibm.uma.Activity; |
| import com.ibm.uma.Descriptor; |
| import com.ibm.uma.Milestone; |
| import com.ibm.uma.RoleDescriptor; |
| import com.ibm.uma.TeamProfile; |
| import com.ibm.uma.UmaFactory; |
| import com.ibm.uma.UmaPackage; |
| import com.ibm.uma.util.AssociationHelper; |
| |
| /** |
| * Item provider for Team Allocation activity |
| * |
| * @author Phong Nguyen Le |
| * @author Shilpa Toraskar |
| * @since 1.0 |
| * |
| */ |
| public class OBSActivityItemProvider extends BSActivityItemProvider { |
| |
| private Disposable rolledUpWrappers; |
| |
| /** |
| * @param adapterFactory |
| */ |
| public OBSActivityItemProvider(AdapterFactory adapterFactory) { |
| super(adapterFactory); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see com.ibm.library.edit.process.BSActivityItemProvider#collectNewChildDescriptors(java.util.Collection, |
| * java.lang.Object) |
| */ |
| protected void collectNewChildDescriptors(Collection newChildDescriptors, |
| Object object) { |
| // Activity act = (Activity) object; |
| // if(hasChildDescriptor(act)) { |
| // newChildDescriptors.add |
| // (createChildParameter |
| // (UmaPackage.eINSTANCE.getActivity_BreakdownElements(), |
| // UmaFactory.eINSTANCE.createRoleDescriptor())); |
| // |
| // newChildDescriptors.add |
| // (createChildParameter |
| // (UmaPackage.eINSTANCE.getActivity_BreakdownElements(), |
| // UmaFactory.eINSTANCE.createTeamProfile())); |
| // |
| // } |
| // else { |
| newChildDescriptors.add(createChildParameter(UmaPackage.eINSTANCE |
| .getActivity_BreakdownElements(), UmaFactory.eINSTANCE |
| .createPhase())); |
| |
| newChildDescriptors.add(createChildParameter(UmaPackage.eINSTANCE |
| .getActivity_BreakdownElements(), UmaFactory.eINSTANCE |
| .createIteration())); |
| |
| newChildDescriptors.add(createChildParameter(UmaPackage.eINSTANCE |
| .getActivity_BreakdownElements(), UmaFactory.eINSTANCE |
| .createActivity())); |
| |
| // if(act.getBreakdownElements().isEmpty()) { |
| newChildDescriptors.add(createChildParameter(UmaPackage.eINSTANCE |
| .getActivity_BreakdownElements(), UmaFactory.eINSTANCE |
| .createRoleDescriptor())); |
| |
| // COMPOSITE ROLE FEATURE IS NOT AVAILABLE FOR FIRST RELEASE. |
| // newChildDescriptors.add |
| // (createChildParameter |
| // (UmaPackage.eINSTANCE.getActivity_BreakdownElements(), |
| // UmaFactory.eINSTANCE.createCompositeRole())); |
| // |
| newChildDescriptors.add(createChildParameter(UmaPackage.eINSTANCE |
| .getActivity_BreakdownElements(), UmaFactory.eINSTANCE |
| .createTeamProfile())); |
| |
| // } |
| // } |
| |
| newChildDescriptors.add(createChildParameter(UmaPackage.eINSTANCE |
| .getActivity_BreakdownElements(), UmaFactory.eINSTANCE |
| .createMilestone())); |
| |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see com.ibm.uma.tng.process.BSActivityItemProvider#acceptAsChild(java.lang.Object) |
| */ |
| protected boolean acceptAsChild(Object child) { |
| if (!super.acceptAsChild(child)) |
| return false; |
| |
| // if(isRolledUp()) { |
| // return child instanceof RoleDescriptor; |
| // } |
| return child instanceof Activity || child instanceof RoleDescriptor |
| || child instanceof TeamProfile || child instanceof Milestone; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see com.ibm.library.edit.process.BSActivityItemProvider#getObject(com.ibm.uma.Descriptor) |
| */ |
| protected Object getObject(Descriptor descriptor) { |
| return ((RoleDescriptor) descriptor).getRole(); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see com.ibm.library.edit.process.BSActivityItemProvider#createDropCommand(java.lang.Object, |
| * java.util.List) |
| */ |
| public IResourceAwareCommand createDropCommand(Object owner, |
| List dropElements) { |
| return new OBSDropCommand((Activity) owner, dropElements); |
| } |
| |
| protected Command createDragAndDropCommand(EditingDomain domain, |
| Object owner, float location, int operations, int operation, |
| Collection collection) { |
| // System.out |
| // .println("ENTER: |
| // com.ibm.library.edit.process.WBSActivityItemProvider#createDragAndDropCommand(domain, |
| // owner, location, operations, operation, collection)"); |
| Command cmd = new OBSDragAndDropCommand(domain, owner, location, |
| operations, operation, collection); |
| |
| // System.out.println(" can execute: " + cmd.canExecute()); |
| // System.out.println(" owner: " + owner); |
| // System.out.println(" collection: " + collection); |
| // System.out.println(" location: " + location); |
| // System.out.println(" operations: " + operations); |
| // System.out.println(" operation: " + operation); |
| // |
| // System.out |
| // .println("EXIT: |
| // com.ibm.library.edit.process.WBSActivityItemProvider#createDragAndDropCommand(domain, |
| // owner, location, operations, operation, collection)"); |
| return cmd; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see com.ibm.library.edit.process.BSActivityItemProvider#acceptAsRolledUpChild(java.lang.Object) |
| */ |
| protected boolean acceptAsRolledUpChild(Object child) { |
| if (!super.acceptAsRolledUpChild(child)) |
| return false; |
| |
| // Object obj; |
| // if(child instanceof IWrapperItemProvider) { |
| // obj = ((IWrapperItemProvider)child).getValue(); |
| // } |
| // else { |
| // obj = child; |
| // } |
| |
| Object obj = TngUtil.unwrap(child); |
| |
| return obj instanceof RoleDescriptor; |
| } |
| |
| // /* (non-Javadoc) |
| // * @see |
| // com.ibm.library.edit.process.BSActivityItemProvider#refreshChildren(org.eclipse.emf.common.notify.Notification, |
| // java.util.List) |
| // */ |
| // protected void refreshChildren(Notification notification, List |
| // newOrOldChildren) { |
| // if(!newOrOldChildren.isEmpty()) { |
| // Process topAct = (Process) getTopItem(); |
| // AdapterFactory rootAdapterFactory = getRootAdapterFactory(); |
| // |
| // ProcessUtil.refreshViewer(rootAdapterFactory, topAct); |
| // |
| // return; |
| // |
| // } |
| // } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see com.ibm.library.edit.process.BSActivityItemProvider#getChildren(java.lang.Object) |
| */ |
| public Collection getChildren(Object object) { |
| if (rolledUpWrappers != null) { |
| rolledUpWrappers.dispose(); |
| } |
| |
| Object proc = getTopItem(); |
| |
| if (isRolledUp()) { |
| List teamProfiles = new ArrayList(); |
| List roleDescriptors = new ArrayList(); |
| Collection children = super.getChildren(object); |
| for (Iterator iter = children.iterator(); iter.hasNext();) { |
| Object child = iter.next(); |
| Object e = TngUtil.unwrap(child); |
| if (e instanceof RoleDescriptor) { |
| RoleDescriptor desc = (RoleDescriptor) e; |
| List list = AssociationHelper.getTeamProfiles(desc); |
| if (list.isEmpty()) { |
| roleDescriptors.add(child); |
| } else { |
| if (list.size() == 1) { |
| TeamProfile teamProfile = (TeamProfile) list.get(0); |
| if (!TngUtil.checkExist(teamProfiles, teamProfile)) { |
| BreakdownElementWrapperItemProvider wrapper = new TeamProfileWrapperItemProvider( |
| teamProfile, object, adapterFactory) { |
| protected IWrapperItemProvider createWrapper( |
| Object value, Object owner, |
| AdapterFactory adapterFactory) { |
| BreakdownElementWrapperItemProvider wrapper = (BreakdownElementWrapperItemProvider) super |
| .createWrapper(value, owner, |
| adapterFactory); |
| wrapper.readOnly = readOnly; |
| return wrapper; |
| } |
| }; |
| IBSItemProvider adapter = (IBSItemProvider) adapterFactory |
| .adapt(teamProfile, |
| ITreeItemContentProvider.class); |
| wrapper.readOnly = (proc != adapter |
| .getTopItem()); |
| // wrapper.setColumnIndexToNameMap(columnIndexToNameMap); |
| teamProfiles.add(wrapper); |
| } |
| } else { |
| if (rolledUpWrappers == null) { |
| rolledUpWrappers = new Disposable(); |
| } |
| |
| boolean readOnly = false; |
| if (child instanceof BreakdownElementWrapperItemProvider) { |
| readOnly = ((BreakdownElementWrapperItemProvider) child) |
| .isReadOnly(); |
| } |
| |
| // show one descriptor per team |
| // |
| for (Iterator iterator = list.iterator(); iterator |
| .hasNext();) { |
| TeamRoleDescriptorItemProvider itemProvider = new TeamRoleDescriptorItemProvider( |
| desc, object, adapterFactory); |
| // itemProvider.setColumnIndexToNameMap(columnIndexToNameMap); |
| itemProvider.readOnly = readOnly; |
| itemProvider.team = (TeamProfile) iterator |
| .next(); |
| rolledUpWrappers.add(itemProvider); |
| roleDescriptors.add(itemProvider); |
| } |
| } |
| } |
| } |
| } |
| teamProfiles.addAll(roleDescriptors); |
| return teamProfiles; |
| } |
| |
| return super.getChildren(object); |
| } |
| |
| public Collection getEClasses() { |
| return ProcessUtil.getOBSEclasses(); |
| } |
| |
| private static class TeamRoleDescriptorItemProvider extends |
| RoleDescriptorWrapperItemProvider { |
| /** |
| * @param value |
| * @param owner |
| * @param adapterFactory |
| */ |
| public TeamRoleDescriptorItemProvider(RoleDescriptor value, |
| Object owner, AdapterFactory adapterFactory) { |
| super(value, owner, adapterFactory); |
| readOnly = false; |
| } |
| |
| private TeamProfile team; |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see com.ibm.library.edit.process.RoleDescriptorItemProvider#getAttribute(java.lang.Object, |
| * java.lang.String) |
| */ |
| public String getAttribute(Object object, String property) { |
| if (property == IBSItemProvider.COL_TEAMS && team != null) { |
| return TngUtil.getPresentationName(team); |
| } |
| return super.getAttribute(object, property); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see com.ibm.library.edit.process.BreakdownElementWrapperItemProvider#createWrapper(java.lang.Object, |
| * java.lang.Object, org.eclipse.emf.common.notify.AdapterFactory) |
| */ |
| protected IWrapperItemProvider createWrapper(Object value, |
| Object owner, AdapterFactory adapterFactory) { |
| BreakdownElementWrapperItemProvider wrapper = (BreakdownElementWrapperItemProvider) super |
| .createWrapper(value, owner, adapterFactory); |
| wrapper.readOnly = readOnly; |
| return wrapper; |
| } |
| } |
| |
| } |