blob: 712b0919a625178a1b4c29e25ad8af919eb03ea8 [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2006 IBM Corporation and others.
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// which accompanies this distribution, and is available at
// http://www.eclipse.org/legal/epl-v10.html
//
// Contributors:
// IBM Corporation - initial implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.library.edit.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;
}
}
}