blob: c7aafd91bf9ca8600a38016b299010eec045e287 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011, 2012, 2013 Red Hat, Inc.
* All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5.property;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.bpmn2.InputOutputSpecification;
import org.eclipse.bpmn2.ItemAwareElement;
import org.eclipse.bpmn2.ReceiveTask;
import org.eclipse.bpmn2.SendTask;
import org.eclipse.bpmn2.ServiceTask;
import org.eclipse.bpmn2.modeler.core.merrimac.clad.ListCompositeContentProvider;
import org.eclipse.bpmn2.modeler.core.merrimac.clad.TableColumn;
import org.eclipse.bpmn2.modeler.core.runtime.BaseRuntimeExtensionDescriptor;
import org.eclipse.bpmn2.modeler.core.runtime.CustomTaskDescriptor;
import org.eclipse.bpmn2.modeler.core.runtime.ModelExtensionDescriptor;
import org.eclipse.bpmn2.modeler.core.runtime.ModelExtensionDescriptor.Property;
import org.eclipse.bpmn2.modeler.ui.property.tasks.IoParameterNameColumn;
import org.eclipse.bpmn2.modeler.ui.property.tasks.IoParametersDetailComposite;
import org.eclipse.bpmn2.modeler.ui.property.tasks.IoParametersListComposite;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
public class JbpmIoParametersListComposite extends IoParametersListComposite {
public JbpmIoParametersListComposite(
IoParametersDetailComposite detailComposite, EObject container,
InputOutputSpecification ioSpecification,
EStructuralFeature ioFeature) {
super(detailComposite, container, ioSpecification, ioFeature);
}
@Override
public void bindList(final EObject theobject, final EStructuralFeature thefeature) {
super.bindList(theobject, thefeature);
// Add a selection listener so we can enable and disable the Remove button.
// This should only be enabled for I/O Parameters that were initially added by
// the user, i.e. only those that are not defined in the WID file.
tableViewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
if (removeAction!=null) {
IStructuredSelection ss = (IStructuredSelection)event.getSelection();
ItemAwareElement element = (ItemAwareElement)ss.getFirstElement();
boolean enable = !event.getSelection().isEmpty();
if (JbpmIoParametersDetailComposite.isCustomTaskIOParameter(element))
enable = false;
removeAction.setEnabled(enable);
}
}
});
}
@Override
protected Object removeListItem(EObject object, EStructuralFeature feature, int index) {
EList<EObject> list = (EList<EObject>)object.eGet(feature);
ItemAwareElement element = (ItemAwareElement)list.get(index);
while (JbpmIoParametersDetailComposite.isCustomTaskIOParameter(element)) {
++index;
element = (ItemAwareElement)list.get(index);
}
return super.removeListItem(object, feature, index);
}
@Override
public void setBusinessObject(EObject object) {
super.setBusinessObject(object);
// if the owning Activity is a Custom Task, then make this table read-only
// same thing for ServiceTask, SendTask and ReceiveTask if they define an
// Operation and/or Message
boolean enabled = true;
if (activity instanceof ServiceTask) {
enabled = ((ServiceTask)activity).getOperationRef()==null;
}
else if (activity instanceof SendTask) {
enabled = ((SendTask)activity).getOperationRef()==null && ((SendTask)activity).getMessageRef()==null;
}
else if (activity instanceof ReceiveTask) {
enabled = ((ReceiveTask)activity).getOperationRef()==null && ((ReceiveTask)activity).getMessageRef()==null;
}
else if (BaseRuntimeExtensionDescriptor.getDescriptor(activity, CustomTaskDescriptor.class) != null) {
enabled = false;
}
if (columnProvider!=null) {
for (TableColumn tc : (List<TableColumn>) columnProvider.getColumns()) {
if (tc instanceof IoParameterNameColumn) {
tc.setEditable(enabled);
}
}
}
}
@Override
public ListCompositeContentProvider getContentProvider(EObject object, EStructuralFeature feature, EList<EObject>list) {
if (contentProvider==null) {
contentProvider = new ListCompositeContentProvider(this, object, feature, list) {
@Override
public Object[] getElements(Object inputElement) {
Object elements[] = super.getElements(inputElement);
List<Property> props = null;
ModelExtensionDescriptor med = BaseRuntimeExtensionDescriptor.getDescriptor(activity, ModelExtensionDescriptor.class);
if (med!=null) {
if (JbpmIoParametersListComposite.this.isInput)
props = med.getProperties("ioSpecification/dataInputs/name"); //$NON-NLS-1$
else
props = med.getProperties("ioSpecification/dataOutputs/name"); //$NON-NLS-1$
List<Object> filtered = new ArrayList<Object>();
for (Object e : elements) {
boolean skip = false;
EStructuralFeature f = ((EObject)e).eClass().getEStructuralFeature("name"); //$NON-NLS-1$
if (f!=null) {
Object elementName = (String) ((EObject)e).eGet(f);
for (Property p : props) {
Object propName = p.getFirstStringValue();
if (elementName!=null && propName!=null && elementName.equals(propName)) {
skip = true;
break;
}
}
}
if (!skip)
filtered.add(e);
}
return filtered.toArray();
}
return elements;
}
};
}
return contentProvider;
}
}