blob: a24614ca984810ec85213310fe9e004fb735e0f5 [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 java.util.Set;
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.ProcessWorkProductFilter;
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.AssignWPToTaskDescriptor;
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.library.edit.util.TaskDescriptorPropUtil;
import org.eclipse.epf.library.edit.util.WorkProductPropUtil;
import org.eclipse.epf.uma.Activity;
import org.eclipse.epf.uma.Constraint;
import org.eclipse.epf.uma.Descriptor;
import org.eclipse.epf.uma.MethodElement;
import org.eclipse.epf.uma.Process;
import org.eclipse.epf.uma.TaskDescriptor;
import org.eclipse.epf.uma.UmaFactory;
import org.eclipse.epf.uma.UmaPackage;
import org.eclipse.epf.uma.WorkProduct;
import org.eclipse.epf.uma.WorkProductDescriptor;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.dialogs.ElementListSelectionDialog;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
/**
* The task descriptor - work product section
*
* @author Shilpa Toraskar
* @since 1.0
*
*/
public class TaskDescriptorWorkProductSection extends RelationSection {
private IFilter filter = null;
private Button ctrl_state_1, ctrl_state_2, ctrl_state_3, ctrl_state_4;
public static final String UNASSIGN_STATE_NAME = "UnassignState"; //$NON-NLS-1$
public static final String UNASSIGN_STATE_BODY = PropertiesResources.Process_UnassignState_Body_Text;
public static final String UNASSIGN_STATE_DESCRIPTION = PropertiesResources.Process_UnassignState_Description;
/**
* Get process work product filter
*/
public IFilter getFilter() {
if (filter == null) {
filter = new ProcessWorkProductFilter(getConfiguration(), null,
FilterConstants.WORKPRODUCTS);
} else if (filter instanceof DescriptorConfigurationFilter) {
((DescriptorConfigurationFilter) filter).setMethodConfiguration(getConfiguration());
}
return filter;
}
/**
* @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.getMandatoryInput());
if (isSyncFree()
&& ! DescriptorPropUtil.getDesciptorPropUtil()
.isNoAutoSyn(td)) {
// elements.addAll(td.getMandatoryInputExclude());
mixWithExcluded(td, elements, UmaPackage.eINSTANCE.getTask_MandatoryInput(),
UmaPackage.eINSTANCE.getTaskDescriptor_MandatoryInputExclude(), UmaPackage.eINSTANCE.getTaskDescriptor_MandatoryInput());
}
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.getOptionalInput());
if (isSyncFree()
&& ! DescriptorPropUtil.getDesciptorPropUtil()
.isNoAutoSyn(td)) {
// elements.addAll(td.getOptionalInputExclude());
mixWithExcluded(td, elements, UmaPackage.eINSTANCE.getTask_OptionalInput(),
UmaPackage.eINSTANCE.getTaskDescriptor_OptionalInputExclude(), UmaPackage.eINSTANCE.getTaskDescriptor_OptionalInput());
}
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).getExternalInput())
.toArray();
}
};
tableViewer3.setContentProvider(contentProvider);
}
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#initContentProvider4()
*/
protected void initContentProvider4() {
contentProvider = new AdapterFactoryContentProvider(getAdapterFactory()) {
public Object[] getElements(Object object) {
TaskDescriptor td = (TaskDescriptor) element;
List<MethodElement> elements = new ArrayList<MethodElement>();
elements.addAll(td.getOutput());
if (isSyncFree()
&& ! DescriptorPropUtil.getDesciptorPropUtil()
.isNoAutoSyn(td)) {
// elements.addAll(td.getOutputExclude());
mixWithExcluded(td, elements, UmaPackage.eINSTANCE.getTask_Output(),
UmaPackage.eINSTANCE.getTaskDescriptor_OutputExclude(), UmaPackage.eINSTANCE.getTaskDescriptor_Output());
}
return getFilteredList(elements).toArray();
}
};
tableViewer4.setContentProvider(contentProvider);
}
protected void initLabelProvider1() {
ILabelProvider provider = getLabelProvider(
UmaPackage.eINSTANCE.getTaskDescriptor_MandatoryInput(), true);
tableViewer1.setLabelProvider(provider);
}
protected void initLabelProvider2() {
ILabelProvider provider = getLabelProvider(
UmaPackage.eINSTANCE.getTaskDescriptor_OptionalInput(), true);
tableViewer2.setLabelProvider(provider);
}
protected void initLabelProvider3() {
ILabelProvider provider = getLabelProvider(
UmaPackage.eINSTANCE.getTaskDescriptor_ExternalInput(), false);
tableViewer3.setLabelProvider(provider);
}
protected void initLabelProvider4() {
ILabelProvider provider = getLabelProvider(
UmaPackage.eINSTANCE.getTaskDescriptor_Output(), true);
tableViewer4.setLabelProvider(provider);
}
private ILabelProvider getLabelProvider(final EReference ref, boolean enableSyncFree) {
ILabelProvider provider = null;
if (isSyncFree() && enableSyncFree) {
provider = new SyncFreeLabelProvider(
TngAdapterFactory.INSTANCE.getPBS_ComposedAdapterFactory(),
(Descriptor)element, ref, getConfiguration()) {
public String getColumnText(Object obj, int columnIndex) {
String label = super.getColumnText(obj, columnIndex);
if (obj instanceof WorkProductDescriptor) {
label = getLabelForWpd((WorkProductDescriptor)obj, label, ref);
}
return label;
}
};
} else {
provider = new AdapterFactoryLabelProvider(
TngAdapterFactory.INSTANCE.getPBS_ComposedAdapterFactory()) {
public String getColumnText(Object obj, int columnIndex) {
String label = super.getColumnText(obj, columnIndex);
if (obj instanceof WorkProductDescriptor) {
label = getLabelForWpd((WorkProductDescriptor)obj, label, ref);
}
return label;
}
};
}
return provider;
}
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#init()
*/
protected void init() {
super.init();
// labelProvider = new AdapterFactoryLabelProvider(
// TngAdapterFactory.INSTANCE.getPBS_ComposedAdapterFactory());
int numOfTables = 4;
setTabData(PropertiesResources.TaskDescriptor_WorkProducts_SectionTitle,
PropertiesResources.TaskDescriptor_WorkProducts_SectionDescription,
PropertiesResources.TaskDescriptor_WorkProducts_Table1,
PropertiesResources.TaskDescriptor_WorkProducts_Table2,
PropertiesResources.TaskDescriptor_WorkProducts_Table3,
PropertiesResources.TaskDescriptor_WorkProducts_Table4,
FilterConstants.WORKPRODUCTS);
boolean[] changesAllowed = { true, 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,
WorkProductDescriptor.class, items);
}
private List getWorkProducts(List items) {
List wpList = new ArrayList();
if (!items.isEmpty()) {
for (int i = 0; i < items.size(); i++) {
wpList.add(((WorkProductDescriptor) items.get(i))
.getWorkProduct());
}
}
return wpList;
}
protected void addItems1(List list) {
addItems1(list, 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 = getWorkProducts(((TaskDescriptor) element)
.getOptionalInput());
elementList.addAll(getWorkProducts(((TaskDescriptor) element)
.getExternalInput()));
List newList = new ArrayList();
for (int i = 0; i < items.size(); i++) {
Object obj = items.get(i);
if (obj instanceof WorkProduct) {
WorkProduct wp = (WorkProduct) obj;
if (!elementList.contains(wp))
newList.add(wp);
}
}
if (newList.size() > 0) {
AssignWPToTaskDescriptor cmd = new AssignWPToTaskDescriptor(
(TaskDescriptor) element, newList,
IActionTypeConstants.ADD_MANDATORY_INPUT,
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 = getWorkProducts(((TaskDescriptor) element)
.getMandatoryInput());
elementList.addAll(getWorkProducts(((TaskDescriptor) element)
.getExternalInput()));
List newList = new ArrayList();
for (int i = 0; i < items.size(); i++) {
Object obj = items.get(i);
if (obj instanceof WorkProduct) {
WorkProduct wp = (WorkProduct) obj;
if (!elementList.contains(wp))
newList.add(wp);
}
}
if (newList.size() > 0) {
AssignWPToTaskDescriptor cmd = new AssignWPToTaskDescriptor(
(TaskDescriptor) element, newList,
IActionTypeConstants.ADD_OPTIONAL_INPUT,
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 = getWorkProducts(((TaskDescriptor) element)
.getMandatoryInput());
elementList.addAll(getWorkProducts(((TaskDescriptor) element)
.getOptionalInput()));
List newList = new ArrayList();
for (int i = 0; i < items.size(); i++) {
Object obj = items.get(i);
if (obj instanceof WorkProduct) {
WorkProduct wp = (WorkProduct) obj;
if (!elementList.contains(wp))
newList.add(wp);
}
}
if (newList.size() > 0) {
AssignWPToTaskDescriptor cmd = new AssignWPToTaskDescriptor(
(TaskDescriptor) element, newList,
IActionTypeConstants.ADD_EXTERNAL_INPUT,
getConfiguration());
actionMgr.execute(cmd);
}
}
};
protected void addItems4(List items) {
addItems4(items, false);
}
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#addItems4(java.util.List)
*/
protected void addItems4(List items, boolean calledForExculded) {
if (!items.isEmpty()) {
AssignWPToTaskDescriptor cmd = new AssignWPToTaskDescriptor(
(TaskDescriptor) element, items,
IActionTypeConstants.ADD_OUTPUT, getConfiguration(), calledForExculded);
actionMgr.execute(cmd);
}
};
/**
* @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__MANDATORY_INPUT);
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__OPTIONAL_INPUT);
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__EXTERNAL_INPUT);
actionMgr.execute(cmd);
}
};
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#removeItems4(java.util.List)
*/
protected void removeItems4(List items) {
if (!items.isEmpty()) {
RemoveDescriptorCommand cmd = new RemoveDescriptorCommand((Descriptor)element,
items, UmaPackage.TASK_DESCRIPTOR__OUTPUT);
actionMgr.execute(cmd);
}
};
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#getExistingElements1()
*/
protected List getExistingElements1() {
return ((TaskDescriptor) element).getMandatoryInput();
};
protected List getExistingContentElements1() {
List<MethodElement> list = ProcessUtil.getAssociatedElementList(getExistingElements1());
TaskDescriptor td = (TaskDescriptor) element;
if (isSyncFree()
&& ! DescriptorPropUtil.getDesciptorPropUtil()
.isNoAutoSyn(td)) {
// list.addAll(td.getMandatoryInputExclude());
mixWithExcluded(td, list, UmaPackage.eINSTANCE.getTask_MandatoryInput(),
UmaPackage.eINSTANCE.getTaskDescriptor_MandatoryInputExclude(), UmaPackage.eINSTANCE.getTaskDescriptor_MandatoryInput());
}
return list;
};
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#getExistingElements2()
*/
protected List getExistingElements2() {
return ((TaskDescriptor) element).getOptionalInput();
};
protected List getExistingContentElements2() {
List<MethodElement> list = ProcessUtil.getAssociatedElementList(getExistingElements2());
TaskDescriptor td = (TaskDescriptor) element;
if (isSyncFree()
&& ! DescriptorPropUtil.getDesciptorPropUtil()
.isNoAutoSyn(td)) {
// list.addAll(td.getOptionalInputExclude());
mixWithExcluded(td, list, UmaPackage.eINSTANCE.getTask_OptionalInput(),
UmaPackage.eINSTANCE.getTaskDescriptor_OptionalInputExclude(), UmaPackage.eINSTANCE.getTaskDescriptor_OptionalInput());
}
return list;
};
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#getExistingElements3()
*/
protected List getExistingElements3() {
return ((TaskDescriptor) element).getExternalInput();
};
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#getExistingElements4()
*/
protected List getExistingElements4() {
return ((TaskDescriptor) element).getOutput();
};
protected List getExistingContentElements4() {
List<MethodElement> list = ProcessUtil.getAssociatedElementList(getExistingElements4());
TaskDescriptor td = (TaskDescriptor) element;
if (isSyncFree()
&& ! DescriptorPropUtil.getDesciptorPropUtil()
.isNoAutoSyn(td)) {
// list.addAll(td.getOutputExclude());
mixWithExcluded(td, list, UmaPackage.eINSTANCE.getTask_Output(),
UmaPackage.eINSTANCE.getTaskDescriptor_OutputExclude(), UmaPackage.eINSTANCE.getTaskDescriptor_Output());
}
return list;
};
/**
* @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#getFilterForDescriptors()
*/
protected IFilter getFilterForDescriptors() {
return new DescriptorProcessFilter(getConfiguration()) {
protected boolean childAccept(Object obj) {
if (obj instanceof Activity) {
List list1 = new ArrayList();
getActivitiesInScope(TngAdapterFactory.INSTANCE
.getWBS_ComposedAdapterFactory(), element, list1);
if (list1.contains(obj))
return true;
else
return false;
}
if (obj instanceof WorkProductDescriptor)
return true;
return false;
}
};
}
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#addFromProcessItems1(java.util.List)
*/
protected void addFromProcessItems1(List items) {
if (!items.isEmpty()) {
items.removeAll(((TaskDescriptor) element).getOptionalInput());
items.removeAll(((TaskDescriptor) element).getExternalInput());
actionMgr.doAction(IActionManager.ADD_MANY, element,
UmaPackage.eINSTANCE.getTaskDescriptor_MandatoryInput(),
items, -1);
if (isSyncFree()) {
for (Object item : items) {
if (item instanceof Descriptor) {
Descriptor des = (Descriptor) item;
propUtil.addLocalUse(des, (Descriptor)element,
UmaPackage.eINSTANCE.getTaskDescriptor_MandatoryInput());
}
}
}
}
}
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#addFromProcessItems2(java.util.List)
*/
protected void addFromProcessItems2(List items) {
if (!items.isEmpty()) {
items.removeAll(((TaskDescriptor) element).getMandatoryInput());
items.removeAll(((TaskDescriptor) element).getExternalInput());
actionMgr.doAction(IActionManager.ADD_MANY, element,
UmaPackage.eINSTANCE.getTaskDescriptor_OptionalInput(),
items, -1);
if (isSyncFree()) {
for (Object item : items) {
if (item instanceof Descriptor) {
Descriptor des = (Descriptor) item;
propUtil.addLocalUse(des, (Descriptor)element,
UmaPackage.eINSTANCE.getTaskDescriptor_OptionalInput());
}
}
}
}
}
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#addFromProcessItems3(java.util.List)
*/
protected void addFromProcessItems3(List items) {
if (!items.isEmpty()) {
items.removeAll(((TaskDescriptor) element).getMandatoryInput());
items.removeAll(((TaskDescriptor) element).getOptionalInput());
actionMgr.doAction(IActionManager.ADD_MANY, element,
UmaPackage.eINSTANCE.getTaskDescriptor_ExternalInput(),
items, -1);
}
}
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#addFromProcessItems4(java.util.List)
*/
protected void addFromProcessItems4(List items) {
if (!items.isEmpty()) {
actionMgr.doAction(IActionManager.ADD_MANY, element,
UmaPackage.eINSTANCE.getTaskDescriptor_Output(), items, -1);
if (isSyncFree()) {
for (Object item : items) {
if (item instanceof Descriptor) {
Descriptor des = (Descriptor) item;
propUtil.addLocalUse(des, (Descriptor)element,
UmaPackage.eINSTANCE.getTaskDescriptor_Output());
}
}
}
}
}
/**
* @see org.eclipse.epf.authoring.ui.properties.RelationSection#getDescriptorTabName()
*/
protected String getDescriptorTabName() {
return FilterConstants.WORK_PRODUCT_DESCRIPTORS;
}
protected boolean syncFreeAdd1(IStructuredSelection selection) {
if (selection.size() == 0) {
return false;
}
EReference ref = UmaPackage.eINSTANCE.getTaskDescriptor_MandatoryInput();
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_OptionalInput();
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;
}
protected boolean syncFreeAdd4(IStructuredSelection selection) {
if (selection.size() == 0) {
return false;
}
EReference ref = UmaPackage.eINSTANCE.getTaskDescriptor_Output();
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())) {
addItems4(selection.toList(), true);
return true;
}
return false;
}
protected boolean syncFreeRemove1(IStructuredSelection selection) {
if (selection.size() == 0) {
return true;
}
EReference ref = UmaPackage.eINSTANCE.getTaskDescriptor_MandatoryInput();
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__MANDATORY_INPUT,
UmaPackage.TASK_DESCRIPTOR__MANDATORY_INPUT_EXCLUDE);
actionMgr.execute(cmd);
return true;
}
return false;
}
protected boolean syncFreeRemove2(IStructuredSelection selection) {
if (selection.size() == 0) {
return true;
}
EReference ref = UmaPackage.eINSTANCE.getTaskDescriptor_OptionalInput();
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__OPTIONAL_INPUT,
UmaPackage.TASK_DESCRIPTOR__OPTIONAL_INPUT_EXCLUDE);
actionMgr.execute(cmd);
return true;
}
return false;
}
protected boolean syncFreeRemove4(IStructuredSelection selection) {
if (selection.size() == 0) {
return true;
}
EReference ref = UmaPackage.eINSTANCE.getTaskDescriptor_Output();
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__OUTPUT,
UmaPackage.TASK_DESCRIPTOR__OUTPUT_EXCLUDE);
actionMgr.execute(cmd);
return true;
}
return false;
}
protected void syncFreeUpdateBtnStatus1(IStructuredSelection selection) {
EReference ref = UmaPackage.eINSTANCE.getTaskDescriptor_MandatoryInput();
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_OptionalInput();
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 void syncFreeUpdateBtnStatus4(IStructuredSelection selection) {
EReference ref = UmaPackage.eINSTANCE.getTaskDescriptor_Output();
boolean result = propUtil.checkSelection(selection.toList(), (Descriptor)element, ref, getConfiguration());
if (!result) {
ctrl_add_4.setEnabled(false);
ctrl_remove_4.setEnabled(false);
} else {
Object testObj = selection.getFirstElement();
if (propUtil.isDynamicAndExclude(testObj, (Descriptor)element, ref, getConfiguration())) {
ctrl_add_4.setEnabled(true);
ctrl_remove_4.setEnabled(false);
} else {
ctrl_add_4.setEnabled(true);
ctrl_remove_4.setEnabled(true);
}
}
}
protected boolean isSyncFree() {
return ProcessUtil.isSynFree();
}
public String getLabelForWpd(WorkProductDescriptor wpd, String orginalLabel, EReference ref) {
List<Constraint> states = TaskDescriptorPropUtil.getTaskDescriptorPropUtil(actionMgr).getWpStates(
(TaskDescriptor)element, wpd, ref);
if (states.size() > 0) {
String stateName = states.get(0).getBody();
return orginalLabel + " [" + stateName + "]"; //$NON-NLS-1$ //$NON-NLS-2$
}
return orginalLabel;
}
protected void createAddtionalButton1(Composite parent) {
ctrl_state_1 = FormUI.createButton(toolkit, parent, PropertiesResources.Process_AssignState);
ctrl_state_1.setEnabled(false);
final EReference ref = UmaPackage.eINSTANCE.getTaskDescriptor_MandatoryInput();
ctrl_state_1.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
assignState(tableViewer1, ref);
}
});
tableViewer1.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection) tableViewer1.getSelection();
//need check the editable variable to support green parent scenario
if ((selection.size() == 1) && (editable)) {
if (isSyncFree()) {
Object obj = selection.getFirstElement();
if (propUtil.isDynamicAndExclude(obj, (Descriptor)element, ref, getConfiguration())) {
ctrl_state_1.setEnabled(false);
} else {
ctrl_state_1.setEnabled(true);
}
} else {
ctrl_state_1.setEnabled(true);
}
} else {
ctrl_state_1.setEnabled(false);
}
}
});
}
protected void createAddtionalButton2(Composite parent) {
ctrl_state_2 = FormUI.createButton(toolkit, parent, PropertiesResources.Process_AssignState);
ctrl_state_2.setEnabled(false);
final EReference ref = UmaPackage.eINSTANCE.getTaskDescriptor_OptionalInput();
ctrl_state_2.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
assignState(tableViewer2, ref);
}
});
tableViewer2.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection) tableViewer2.getSelection();
if ((selection.size() == 1) && (editable)) {
if (isSyncFree()) {
Object obj = selection.getFirstElement();
if (propUtil.isDynamicAndExclude(obj, (Descriptor)element, ref, getConfiguration())) {
ctrl_state_2.setEnabled(false);
} else {
ctrl_state_2.setEnabled(true);
}
} else {
ctrl_state_2.setEnabled(true);
}
} else {
ctrl_state_2.setEnabled(false);
}
}
});
}
protected void createAddtionalButton3(Composite parent) {
ctrl_state_3 = FormUI.createButton(toolkit, parent, PropertiesResources.Process_AssignState);
ctrl_state_3.setEnabled(false);
final EReference ref = UmaPackage.eINSTANCE.getTaskDescriptor_ExternalInput();
ctrl_state_3.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
assignState(tableViewer3, ref);
}
});
tableViewer3.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection) tableViewer3.getSelection();
if ((selection.size() == 1) && (editable)) {
if (isSyncFree()) {
Object obj = selection.getFirstElement();
if (propUtil.isDynamicAndExclude(obj, (Descriptor)element, ref, getConfiguration())) {
ctrl_state_3.setEnabled(false);
} else {
ctrl_state_3.setEnabled(true);
}
} else {
ctrl_state_3.setEnabled(true);
}
} else {
ctrl_state_3.setEnabled(false);
}
}
});
}
protected void createAddtionalButton4(Composite parent) {
ctrl_state_4 = FormUI.createButton(toolkit, parent, PropertiesResources.Process_AssignState);
ctrl_state_4.setEnabled(false);
final EReference ref = UmaPackage.eINSTANCE.getTaskDescriptor_Output();
ctrl_state_4.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
assignState(tableViewer4, ref);
}
});
tableViewer4.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection) tableViewer4.getSelection();
if ((selection.size() == 1) && (editable)) {
if (isSyncFree()) {
Object obj = selection.getFirstElement();
if (propUtil.isDynamicAndExclude(obj, (Descriptor)element, ref, getConfiguration())) {
ctrl_state_4.setEnabled(false);
} else {
ctrl_state_4.setEnabled(true);
}
} else {
ctrl_state_4.setEnabled(true);
}
} else {
ctrl_state_4.setEnabled(false);
}
}
});
}
private void assignState(TableViewer viewer, EReference ref) {
IStructuredSelection selection = (IStructuredSelection)viewer.getSelection();
if (selection.size() == 1) {
if (selection.getFirstElement() instanceof WorkProductDescriptor) {
WorkProductDescriptor wpd = (WorkProductDescriptor)selection.getFirstElement();
ElementListSelectionDialog dialog = new StateSelectionDialog(
viewer.getTable().getShell(),
getLabelProviderForStateSelectionDialog());
dialog.setElements(getInputForStateSelectionDialog(wpd, ref).toArray());
dialog.setMultipleSelection(false);
dialog.setMessage(PropertiesResources.Process_SelectStateDialog_Message);
dialog.setTitle(PropertiesResources.Process_SelectStateDialog_Title);
dialog.setImage(null);
if (dialog.open() == Dialog.CANCEL) {
return;
}
Object[] objs = dialog.getResult();
Constraint newState = (Constraint)objs[0];
//clean up old state first to guarantee only one state assign to wpd
List<Constraint> oldStates = TaskDescriptorPropUtil.getTaskDescriptorPropUtil(actionMgr).getWpStates(
(TaskDescriptor)element, wpd, ref);
for(Constraint oldState : oldStates) {
TaskDescriptorPropUtil.getTaskDescriptorPropUtil(actionMgr).removeWpState(
(TaskDescriptor)element, wpd, oldState, ref);
}
//add the new state
if (!newState.getName().equals(UNASSIGN_STATE_NAME)) {
TaskDescriptorPropUtil.getTaskDescriptorPropUtil(actionMgr).addWpState(
(TaskDescriptor)element, wpd, newState, ref);
}
viewer.refresh();
}
}
}
private ILabelProvider getLabelProviderForStateSelectionDialog() {
ILabelProvider provider = new AdapterFactoryLabelProvider(
TngAdapterFactory.INSTANCE.createLibraryComposedAdapterFactory()) {
public String getText(Object element) {
if (element instanceof Constraint) {
return ((Constraint)element).getBody();
}
return super.getText(element);
}
};
return provider;
}
private List getInputForStateSelectionDialog(WorkProductDescriptor wpd, EReference ref) {
List elements = new ArrayList();
List<Constraint> oldStates = TaskDescriptorPropUtil.getTaskDescriptorPropUtil(actionMgr).getWpStates(
(TaskDescriptor)element, wpd, ref);
WorkProduct wp = (WorkProduct) propUtil.getLinkedElement(wpd);
if (wp != null) {
Set<Constraint> states = WorkProductPropUtil.getWorkProductPropUtil(actionMgr).getAllStates(wp);
states.removeAll(oldStates);
elements.addAll(states);
}
// A special state for unassign state from wpd
elements.add(createUnassignState());
return elements;
}
public static Constraint createUnassignState() {
Constraint constraint = UmaFactory.eINSTANCE.createConstraint();
constraint.setName(UNASSIGN_STATE_NAME);
constraint.setBody(UNASSIGN_STATE_BODY);
constraint.setBriefDescription(UNASSIGN_STATE_DESCRIPTION);
return constraint;
}
public static class StateSelectionDialog extends ElementListSelectionDialog {
private Text des;
public StateSelectionDialog(Shell shell, ILabelProvider provider) {
super(shell, provider);
}
protected Control createDialogArea(Composite parent) {
Control con = super.createDialogArea(parent);
Label desLabel = new Label((Composite)con, SWT.NULL);
desLabel.setText(PropertiesResources.Process_SelectStateDialog_Label_Description);
des = new Text((Composite)con, SWT.MULTI | SWT.WRAP | SWT.BORDER | SWT.V_SCROLL);
{
GridData gd = new GridData(GridData.FILL_BOTH);
gd.heightHint = 100;
des.setLayoutData(gd);
}
des.setEditable(false);
des.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
addStateListeners();
return con;
}
private void addStateListeners() {
fFilteredList.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
Object[] objs = getSelectedElements();
if ((objs.length > 0) && (objs[0] instanceof Constraint)) {
des.setText(((Constraint)objs[0]).getBriefDescription());
}
}
});
}
}
}