blob: 28e25be60c2c7eab54768c8338aa7067f13ef367 [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.authoring.ui.properties;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
import org.eclipse.emf.edit.provider.ItemProviderAdapter;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
import org.eclipse.epf.authoring.ui.filters.DescriptorConfigurationFilter;
import org.eclipse.epf.authoring.ui.filters.DescriptorProcessFilter;
import org.eclipse.epf.authoring.ui.filters.ProcessRoleFilter;
import org.eclipse.epf.library.edit.IFilter;
import org.eclipse.epf.library.edit.TngAdapterFactory;
import org.eclipse.epf.library.edit.command.IActionManager;
import org.eclipse.epf.library.edit.itemsfilter.FilterConstants;
import org.eclipse.epf.library.edit.process.command.AssignRoleToTaskDescriptor;
import org.eclipse.epf.library.edit.process.command.IActionTypeConstants;
import org.eclipse.epf.library.edit.util.DescriptorPropUtil;
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.MethodElement;
import org.eclipse.epf.uma.Process;
import org.eclipse.epf.uma.Role;
import org.eclipse.epf.uma.RoleDescriptor;
import org.eclipse.epf.uma.TaskDescriptor;
import org.eclipse.epf.uma.UmaPackage;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
/**
* The Task descriptor - role tab section
*
* @author Shilpa Toraskar
* @since 1.0
*
*/
public class TaskDescriptorRoleSection extends RelationSection {
private IFilter roleFilter = null;
/**
* Get process roledescriptor filter
*/
public IFilter getFilter() {
if (roleFilter == null) {
roleFilter = new ProcessRoleFilter(getConfiguration(), null,
FilterConstants.ROLES);
} else if (roleFilter instanceof DescriptorConfigurationFilter) {
((DescriptorConfigurationFilter) roleFilter).setMethodConfiguration(getConfiguration());
}
return roleFilter;
}
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#createControls(org.eclipse.swt.widgets.Composite, org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage)
*/
public void createControls(Composite parent,
TabbedPropertySheetPage tabbedPropertySheetPage) {
super.createControls(parent, tabbedPropertySheetPage);
}
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#initContentProvider1()
*/
protected void initContentProvider1() {
contentProvider = new AdapterFactoryContentProvider(getAdapterFactory()) {
public Object[] getElements(Object object) {
TaskDescriptor td = (TaskDescriptor) element;
List<MethodElement> elements = new ArrayList<MethodElement>();
elements.addAll(td.getPerformedPrimarilyBy());
if (isSyncFree()
&& ! DescriptorPropUtil.getDesciptorPropUtil()
.isNoAutoSyn(td)) {
// elements.addAll(td.getPerformedPrimarilyByExcluded());
mixWithExcluded(td, elements, UmaPackage.eINSTANCE.getTask_PerformedBy(),
UmaPackage.eINSTANCE.getTaskDescriptor_PerformedPrimarilyByExcluded(), UmaPackage.eINSTANCE.getTaskDescriptor_PerformedPrimarilyBy());
}
return getFilteredList(elements).toArray();
}
};
tableViewer1.setContentProvider(contentProvider);
}
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#initContentProvider2()
*/
protected void initContentProvider2() {
contentProvider = new AdapterFactoryContentProvider(getAdapterFactory()) {
public Object[] getElements(Object object) {
TaskDescriptor td = (TaskDescriptor) element;
List<MethodElement> elements = new ArrayList<MethodElement>();
elements.addAll(td.getAdditionallyPerformedBy());
if (isSyncFree()
&& ! DescriptorPropUtil.getDesciptorPropUtil()
.isNoAutoSyn(td)) {
// elements.addAll(td.getAdditionallyPerformedByExclude());
mixWithExcluded(td, elements, UmaPackage.eINSTANCE.getTask_AdditionallyPerformedBy(),
UmaPackage.eINSTANCE.getTaskDescriptor_AdditionallyPerformedByExclude(), UmaPackage.eINSTANCE.getTaskDescriptor_AdditionallyPerformedBy());
}
return getFilteredList(elements).toArray();
}
};
tableViewer2.setContentProvider(contentProvider);
}
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#initContentProvider3()
*/
protected void initContentProvider3() {
contentProvider = new AdapterFactoryContentProvider(getAdapterFactory()) {
public Object[] getElements(Object object) {
return getFilteredList(
((TaskDescriptor) element).getAssistedBy()).toArray();
}
};
tableViewer3.setContentProvider(contentProvider);
}
protected void initLabelProvider1() {
ILabelProvider provider = null;
if (isSyncFree()) {
provider = new SyncFreeLabelProvider(
TngAdapterFactory.INSTANCE.getOBS_ComposedAdapterFactory(),
(Descriptor)element,
UmaPackage.eINSTANCE.getTaskDescriptor_PerformedPrimarilyBy(), getConfiguration());
} else {
provider = new AdapterFactoryLabelProvider(
TngAdapterFactory.INSTANCE.getOBS_ComposedAdapterFactory());
}
tableViewer1.setLabelProvider(provider);
}
protected void initLabelProvider2() {
ILabelProvider provider = null;
if (isSyncFree()) {
provider = new SyncFreeLabelProvider(
TngAdapterFactory.INSTANCE.getOBS_ComposedAdapterFactory(),
(Descriptor)element,
UmaPackage.eINSTANCE.getTaskDescriptor_AdditionallyPerformedBy(), getConfiguration());
} else {
provider = new AdapterFactoryLabelProvider(
TngAdapterFactory.INSTANCE.getOBS_ComposedAdapterFactory());
}
tableViewer2.setLabelProvider(provider);
}
protected void initLabelProvider3() {
ILabelProvider provider = new AdapterFactoryLabelProvider(
TngAdapterFactory.INSTANCE.getOBS_ComposedAdapterFactory());
tableViewer3.setLabelProvider(provider);
}
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#init()
*/
protected void init() {
super.init();
// labelProvider = new AdapterFactoryLabelProvider(
// TngAdapterFactory.INSTANCE.getOBS_ComposedAdapterFactory());
int numOfTables = 3;
setTabData(PropertiesResources.TaskDescriptor_Roles_SectionTitle,
PropertiesResources.TaskDescriptor_Roles_SectionDescription,
PropertiesResources.TaskDescriptor_Roles_Table1,
PropertiesResources.TaskDescriptor_Roles_Table2,
PropertiesResources.TaskDescriptor_Roles_Table3,
null,
FilterConstants.ROLES);
boolean[] changesAllowed = { true, true, true };
setTableData(numOfTables, changesAllowed);
}
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#refresh()
*/
public void refresh() {
if (getElement() instanceof TaskDescriptor) {
element = (TaskDescriptor) getElement();
}
super.refresh();
}
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#getDescriptorsFromProcess()
*/
protected List getDescriptorsFromProcess() {
List items = new ArrayList();
return ProcessUtil.getElementsInScope(getAdapterFactory(), element,
RoleDescriptor.class, items);
}
private List getRoles(List items) {
List roleList = new ArrayList();
if (!items.isEmpty()) {
for (int i = 0; i < items.size(); i++) {
roleList.add(((RoleDescriptor) items.get(i)).getRole());
}
}
return roleList;
}
protected void addItems1(List items) {
addItems1(items, false);
}
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#addItems1(java.util.List)
*/
protected void addItems1(List items, boolean calledForExculded) {
if (!items.isEmpty()) {
List elementList = getRoles(((TaskDescriptor) element)
.getAdditionallyPerformedBy());
elementList.addAll(getRoles(((TaskDescriptor) element)
.getAssistedBy()));
List newList = new ArrayList();
for (int i = 0; i < items.size(); i++) {
Object obj = items.get(i);
if (obj instanceof Role) {
Role role = (Role) obj;
if (!elementList.contains(role))
newList.add(role);
}
}
if (newList.size() > 0) {
AssignRoleToTaskDescriptor cmd = new AssignRoleToTaskDescriptor(
(TaskDescriptor) element, newList,
IActionTypeConstants.ADD_PRIMARY_PERFORMER, getConfiguration(), calledForExculded);
actionMgr.execute(cmd);
}
}
};
protected void addItems2(List items) {
addItems2(items, false);
}
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#addItems2(java.util.List)
*/
protected void addItems2(List items, boolean calledForExculded) {
if (!items.isEmpty()) {
List elementList = getRoles(((TaskDescriptor) element)
.getPerformedPrimarilyBy());
elementList.addAll(getRoles(((TaskDescriptor) element)
.getAssistedBy()));
List newList = new ArrayList();
for (int i = 0; i < items.size(); i++) {
Object obj = items.get(i);
if (obj instanceof Role) {
Role role = (Role) obj;
if (!elementList.contains(role))
newList.add(role);
}
}
if (newList.size() > 0) {
AssignRoleToTaskDescriptor cmd = new AssignRoleToTaskDescriptor(
(TaskDescriptor) element, newList,
IActionTypeConstants.ADD_ADDITIONAL_PERFORMER, getConfiguration(), calledForExculded);
actionMgr.execute(cmd);
}
}
};
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#addItems3(java.util.List)
*/
protected void addItems3(List items) {
if (!items.isEmpty()) {
List elementList = getRoles(((TaskDescriptor) element)
.getPerformedPrimarilyBy());
elementList.addAll(getRoles(((TaskDescriptor) element)
.getAdditionallyPerformedBy()));
List newList = new ArrayList();
for (int i = 0; i < items.size(); i++) {
Object obj = items.get(i);
if (obj instanceof Role) {
Role role = (Role) obj;
if (!elementList.contains(role))
newList.add(role);
}
}
if (newList.size() > 0) {
AssignRoleToTaskDescriptor cmd = new AssignRoleToTaskDescriptor(
(TaskDescriptor) element, newList,
IActionTypeConstants.ADD_ASSISTED_BY, getConfiguration());
actionMgr.execute(cmd);
}
}
};
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#addFromProcessItems1(java.util.List)
*/
protected void addFromProcessItems1(List items) {
if (!items.isEmpty()) {
items.removeAll(((TaskDescriptor) element)
.getAdditionallyPerformedBy());
items.removeAll(((TaskDescriptor) element).getAssistedBy());
actionMgr.doAction(IActionManager.ADD_MANY, element,
UmaPackage.eINSTANCE
.getTaskDescriptor_PerformedPrimarilyBy(),
items, -1);
if (isSyncFree()) {
for (Object item : items) {
if (item instanceof Descriptor) {
Descriptor des = (Descriptor) item;
propUtil.addLocalUse(des, (Descriptor)element,
UmaPackage.eINSTANCE.getTaskDescriptor_PerformedPrimarilyBy());
}
}
}
}
}
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#addFromProcessItems2(java.util.List)
*/
protected void addFromProcessItems2(List items) {
if (!items.isEmpty()) {
items.removeAll(((TaskDescriptor) element).getAssistedBy());
items.removeAll(((TaskDescriptor) element).getPerformedPrimarilyBy());
actionMgr.doAction(IActionManager.ADD_MANY, element,
UmaPackage.eINSTANCE
.getTaskDescriptor_AdditionallyPerformedBy(),
items, -1);
if (isSyncFree()) {
for (Object item : items) {
if (item instanceof Descriptor) {
Descriptor des = (Descriptor) item;
propUtil.addLocalUse(des, (Descriptor)element,
UmaPackage.eINSTANCE.getTaskDescriptor_AdditionallyPerformedBy());
}
}
}
}
}
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#addFromProcessItems3(java.util.List)
*/
protected void addFromProcessItems3(List items) {
if (!items.isEmpty()) {
items.removeAll(((TaskDescriptor) element)
.getAdditionallyPerformedBy());
items.removeAll(((TaskDescriptor) element).getPerformedPrimarilyBy());
actionMgr.doAction(IActionManager.ADD_MANY, element,
UmaPackage.eINSTANCE.getTaskDescriptor_AssistedBy(), items,
-1);
}
}
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#removeItems1(java.util.List)
*/
protected void removeItems1(List items) {
if (!items.isEmpty()) {
RemoveDescriptorCommand cmd = new RemoveDescriptorCommand((Descriptor)element,
items, UmaPackage.TASK_DESCRIPTOR__PERFORMED_PRIMARILY_BY);
actionMgr.execute(cmd);
}
};
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#removeItems2(java.util.List)
*/
protected void removeItems2(List items) {
if (!items.isEmpty()) {
RemoveDescriptorCommand cmd = new RemoveDescriptorCommand((Descriptor)element,
items,
UmaPackage.TASK_DESCRIPTOR__ADDITIONALLY_PERFORMED_BY);
actionMgr.execute(cmd);
}
};
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#removeItems3(java.util.List)
*/
protected void removeItems3(List items) {
if (!items.isEmpty()) {
RemoveDescriptorCommand cmd = new RemoveDescriptorCommand((Descriptor)element,
items, UmaPackage.TASK_DESCRIPTOR__ASSISTED_BY);
actionMgr.execute(cmd);
}
};
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#getExistingElements1()
*/
protected List getExistingElements1() {
return ((TaskDescriptor) element).getPerformedPrimarilyBy();
};
protected List getExistingContentElements1() {
List<MethodElement> list = ProcessUtil.getAssociatedElementList(getExistingElements1());
TaskDescriptor td = (TaskDescriptor) element;
if (isSyncFree()
&& ! DescriptorPropUtil.getDesciptorPropUtil()
.isNoAutoSyn(td)) {
// list.addAll(td.getPerformedPrimarilyByExcluded());
mixWithExcluded(td, list, UmaPackage.eINSTANCE.getTask_PerformedBy(),
UmaPackage.eINSTANCE.getTaskDescriptor_PerformedPrimarilyByExcluded(), UmaPackage.eINSTANCE.getTaskDescriptor_PerformedPrimarilyBy());
}
return list;
};
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#getExistingElements2()
*/
protected List getExistingElements2() {
return ((TaskDescriptor) element).getAdditionallyPerformedBy();
};
protected List getExistingContentElements2() {
List<MethodElement> list = ProcessUtil.getAssociatedElementList(getExistingElements2());
TaskDescriptor td = (TaskDescriptor) element;
if (isSyncFree()
&& ! DescriptorPropUtil.getDesciptorPropUtil()
.isNoAutoSyn(td)) {
// list.addAll(td.getAdditionallyPerformedByExclude());
mixWithExcluded(td, list, UmaPackage.eINSTANCE.getTask_AdditionallyPerformedBy(),
UmaPackage.eINSTANCE.getTaskDescriptor_AdditionallyPerformedByExclude(), UmaPackage.eINSTANCE.getTaskDescriptor_AdditionallyPerformedBy());
}
return list;
};
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#getExistingElements3()
*/
protected List getExistingElements3() {
return ((TaskDescriptor) element).getAssistedBy();
};
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#getFilterForDescriptors()
*/
protected IFilter getFilterForDescriptors() {
return new DescriptorProcessFilter(getConfiguration()) {
protected boolean childAccept(Object obj) {
if (obj instanceof Activity) {
List list = new ArrayList();
getActivitiesInScope(TngAdapterFactory.INSTANCE
.getWBS_ComposedAdapterFactory(), element, list);
if (list.contains(obj))
return true;
else
return false;
}
if (obj instanceof RoleDescriptor)
return true;
return false;
}
};
}
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#getProcess()
*/
protected Process getProcess() {
AdapterFactory aFactory = TngAdapterFactory.INSTANCE
.getWBS_ComposedAdapterFactory();
ItemProviderAdapter adapter = (ItemProviderAdapter) aFactory.adapt(
element, ITreeItemContentProvider.class);
Object obj = ProcessUtil.getRootProcess(aFactory, adapter, element);
return (Process) obj;
}
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#getDescriptorTabName()
*/
protected String getDescriptorTabName() {
return FilterConstants.ROLE_DESCRIPTORS;
}
//Return true if handled in this method
protected boolean syncFreeAdd1(IStructuredSelection selection) {
if (selection.size() == 0) {
return false;
}
EReference ref = UmaPackage.eINSTANCE.getTaskDescriptor_PerformedPrimarilyBy();
boolean result = propUtil.checkSelection(selection.toList(), (Descriptor)element, ref, getConfiguration());
if (! result) {
return true;
}
Object testObj = selection.getFirstElement();
if (propUtil.isDynamicAndExclude(testObj, (Descriptor)element, ref, getConfiguration())) {
addItems1(selection.toList(), true);
return true;
}
return false;
}
protected boolean syncFreeAdd2(IStructuredSelection selection) {
if (selection.size() == 0) {
return false;
}
EReference ref = UmaPackage.eINSTANCE.getTaskDescriptor_AdditionallyPerformedBy();
boolean result = propUtil.checkSelection(selection.toList(), (Descriptor)element, ref, getConfiguration());
if (! result) {
return true;
}
Object testObj = selection.getFirstElement();
if (propUtil.isDynamicAndExclude(testObj, (Descriptor)element, ref, getConfiguration())) {
addItems2(selection.toList(), true);
return true;
}
return false;
}
//Return true if handled in this method
protected boolean syncFreeRemove1(IStructuredSelection selection) {
if (selection.size() == 0) {
return true;
}
EReference ref = UmaPackage.eINSTANCE.getTaskDescriptor_PerformedPrimarilyBy();
boolean result = propUtil.checkSelection(selection.toList(), (Descriptor)element, ref, getConfiguration());
if (! result) {
return true;
}
Object testObj = selection.getFirstElement();
if (propUtil.isDynamicAndExclude(testObj, (Descriptor)element, ref, getConfiguration())) {
return true;
}
if (propUtil.isDynamic(testObj, (Descriptor)element, ref)) {
MoveDescriptorCommand cmd = new MoveDescriptorCommand((Descriptor)element, selection.toList(),
UmaPackage.TASK_DESCRIPTOR__PERFORMED_PRIMARILY_BY,
UmaPackage.TASK_DESCRIPTOR__PERFORMED_PRIMARILY_BY_EXCLUDED);
actionMgr.execute(cmd);
return true;
}
return false;
}
protected boolean syncFreeRemove2(IStructuredSelection selection) {
if (selection.size() == 0) {
return true;
}
EReference ref = UmaPackage.eINSTANCE.getTaskDescriptor_AdditionallyPerformedBy();
boolean result = propUtil.checkSelection(selection.toList(), (Descriptor)element, ref, getConfiguration());
if (! result) {
return true;
}
Object testObj = selection.getFirstElement();
if (propUtil.isDynamicAndExclude(testObj, (Descriptor)element, ref, getConfiguration())) {
return true;
}
if (propUtil.isDynamic(testObj, (Descriptor)element, ref)) {
MoveDescriptorCommand cmd = new MoveDescriptorCommand((Descriptor)element, selection.toList(),
UmaPackage.TASK_DESCRIPTOR__ADDITIONALLY_PERFORMED_BY,
UmaPackage.TASK_DESCRIPTOR__ADDITIONALLY_PERFORMED_BY_EXCLUDE);
actionMgr.execute(cmd);
return true;
}
return false;
}
protected void syncFreeUpdateBtnStatus1(IStructuredSelection selection) {
EReference ref = UmaPackage.eINSTANCE.getTaskDescriptor_PerformedPrimarilyBy();
boolean result = propUtil.checkSelection(selection.toList(), (Descriptor)element, ref, getConfiguration());
if (!result) {
ctrl_add_1.setEnabled(false);
ctrl_remove_1.setEnabled(false);
} else {
Object testObj = selection.getFirstElement();
if (propUtil.isDynamicAndExclude(testObj, (Descriptor)element, ref, getConfiguration())) {
ctrl_add_1.setEnabled(true);
ctrl_remove_1.setEnabled(false);
} else {
ctrl_add_1.setEnabled(true);
ctrl_remove_1.setEnabled(true);
}
}
}
protected void syncFreeUpdateBtnStatus2(IStructuredSelection selection) {
EReference ref = UmaPackage.eINSTANCE.getTaskDescriptor_AdditionallyPerformedBy();
boolean result = propUtil.checkSelection(selection.toList(), (Descriptor)element, ref, getConfiguration());
if (!result) {
ctrl_add_2.setEnabled(false);
ctrl_remove_2.setEnabled(false);
} else {
Object testObj = selection.getFirstElement();
if (propUtil.isDynamicAndExclude(testObj, (Descriptor)element, ref, getConfiguration())) {
ctrl_add_2.setEnabled(true);
ctrl_remove_2.setEnabled(false);
} else {
ctrl_add_2.setEnabled(true);
ctrl_remove_2.setEnabled(true);
}
}
}
protected boolean isSyncFree() {
return ProcessUtil.isSynFree();
}
}