blob: 38477d65b931fa4a622d5ea16174c40f667fca75 [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.command;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
import org.eclipse.emf.edit.provider.ItemProviderAdapter;
import org.eclipse.epf.library.edit.TngAdapterFactory;
import org.eclipse.epf.library.edit.ui.ReferenceSelection;
import org.eclipse.epf.library.edit.util.ProcessUtil;
import org.eclipse.epf.uma.Activity;
import org.eclipse.epf.uma.Descriptor;
import org.eclipse.epf.uma.RoleDescriptor;
import org.eclipse.epf.uma.TaskDescriptor;
import org.eclipse.epf.uma.TeamProfile;
import org.eclipse.epf.uma.util.AssociationHelper;
;
/**
* Delete role descriptor
*
* @author Shilpa Toraskar
* @since 1.0
*
*/
public class DeleteRoleDescriptor extends RemoveUnusedDescriptorsCommand {
private Activity activity;
private RoleDescriptor roleDesc;
private Collection modifiedResources;
private List notUsedReferences = new ArrayList();
private boolean forceRemoveUnusedReferences;
/**
*
*/
public DeleteRoleDescriptor(RoleDescriptor roleDesc) {
super();
this.roleDesc = roleDesc;
AdapterFactory aFactory = TngAdapterFactory.INSTANCE
.getOBS_ComposedAdapterFactory();
ItemProviderAdapter adapter = (ItemProviderAdapter) aFactory.adapt(
roleDesc, ITreeItemContentProvider.class);
Object parent = adapter.getParent(roleDesc);
if (parent instanceof Activity) {
this.activity = (Activity) parent;
}
this.modifiedResources = new HashSet();
if (activity.eResource() != null) {
modifiedResources.add(activity.eResource());
}
if (roleDesc.eResource() != null) {
modifiedResources.add(roleDesc.eResource());
}
}
public DeleteRoleDescriptor(RoleDescriptor roleDesc,
boolean forceRemoveUnusedReferences) {
this(roleDesc);
this.forceRemoveUnusedReferences = forceRemoveUnusedReferences;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.emf.common.command.Command#execute()
*/
public void execute() {
Set refList = new HashSet();
// get RoleDescriptor relationships references
List assistedTaskDescriptors = AssociationHelper.getAssistedTaskDescriptors(roleDesc);
List additionalTaskDescriptors = AssociationHelper.getAdditionalTaskDescriptors(roleDesc);
List primaryTaskDescriptors = AssociationHelper.getPrimaryTaskDescriptors(roleDesc);
refList.addAll(assistedTaskDescriptors);
refList.addAll(additionalTaskDescriptors);
refList.addAll(primaryTaskDescriptors);
refList.addAll(roleDesc.getResponsibleFor());
for (Iterator itor = refList.iterator(); itor.hasNext();) {
Object object = itor.next();
if (object instanceof Descriptor) {
if (!ProcessUtil.checkDescriptorReferences(roleDesc,
(Descriptor) object)) {
if (activity.getBreakdownElements().contains(object)) // check
// for
// local
// descriptor
notUsedReferences.add(object);
}
}
}
if (!(notUsedReferences.isEmpty())) {
try {
Object[] refToBeDeleted = forceRemoveUnusedReferences ? notUsedReferences
.toArray()
: ReferenceSelection.getReferences(notUsedReferences,
roleDesc);
delete(refToBeDeleted);
}
catch(OperationCanceledException e) {
aborted = true;
}
}
// clear relationships
// clear(roleDesc.getAssistsIn());
for (Iterator iter = assistedTaskDescriptors.iterator(); iter.hasNext();) {
TaskDescriptor td = (TaskDescriptor) iter.next();
td.getAssistedBy().remove(roleDesc);
}
// clear(roleDesc.getPerformsAdditionally());
for (Iterator iter = additionalTaskDescriptors.iterator(); iter.hasNext();) {
TaskDescriptor td = (TaskDescriptor) iter.next();
td.getAdditionallyPerformedBy().remove(roleDesc);
}
// clear(roleDesc.getPerformsAsOwner());
for (Iterator iter = primaryTaskDescriptors.iterator(); iter.hasNext();) {
TaskDescriptor td = (TaskDescriptor) iter.next();
td.getPerformedPrimarilyBy().remove(roleDesc);
}
clear(roleDesc.getResponsibleFor());
// if role is part of any team, please remove it from team as well
List teams = AssociationHelper.getTeamProfiles(roleDesc);
for (Iterator itor = teams.iterator(); itor.hasNext();) {
TeamProfile team = (TeamProfile) itor.next();
team.getTeamRoles().remove(roleDesc);
// find matching roleDescriptor in team roles
Object teamRoleDesc = ProcessUtil
.findRoleDescriptor(team, roleDesc);
team.getTeamRoles().remove(teamRoleDesc);
}
redo();
}
private void clear(List list) {
try {
if ((list != null) && (list.size() > 0)) {
list.clear();
}
} catch (Exception ex) {
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.emf.common.command.Command#redo()
*/
public void redo() {
}
public void undo() {
}
protected boolean prepare() {
return true;
}
public Collection getModifiedResources() {
return modifiedResources;
}
}