blob: e204a872fd1e82336ed9e63de7cb5f423e3aae8b [file] [log] [blame]
package org.eclipse.bpel.ui.wsdl.extensions;
import org.eclipse.bpel.common.ui.details.IDetailsAreaConstants;
import org.eclipse.bpel.common.ui.flatui.FlatFormAttachment;
import org.eclipse.bpel.common.ui.flatui.FlatFormData;
import org.eclipse.bpel.common.ui.flatui.FlatFormLayout;
import org.eclipse.bpel.model.partnerlinktype.PartnerLinkType;
import org.eclipse.bpel.model.partnerlinktype.Role;
import org.eclipse.bpel.model.partnerlinktype.util.PartnerlinktypeConstants;
import org.eclipse.bpel.ui.Messages;
import org.eclipse.bpel.ui.details.providers.AbstractContentProvider;
import org.eclipse.bpel.ui.details.providers.ColumnTableProvider;
import org.eclipse.bpel.ui.properties.BPELPropertySection;
import org.eclipse.bpel.ui.util.BPELUtil;
import org.eclipse.bpel.ui.util.TableCursor;
import org.eclipse.bpel.ui.wsdl.extensions.properties.WSDLComponentSelectionDialogPropertyDescriptor;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.util.Assert;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ISelection;
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.jface.viewers.TextCellEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.wst.common.ui.properties.internal.provisional.AbstractPropertySection;
import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetPage;
import org.eclipse.wst.wsdl.ui.internal.WSDLEditor;
import org.eclipse.wst.wsdl.ui.internal.actions.AddElementAction;
import org.eclipse.wst.wsdl.ui.internal.actions.DeleteAction;
import org.eclipse.wst.wsdl.util.WSDLConstants;
import org.w3c.dom.Element;
public class BPELPartnerLinkRolesSection extends AbstractPropertySection {
protected PartnerLinkType plink;
protected Table rolesTable;
protected TableViewer rolesViewer;
protected ColumnTableProvider tableProvider;
protected TableCursor tableCursor = null;
protected Button addButton;
protected Button removeButton;
protected WSDLEditor editor;
public void aboutToBeHidden() {
// TODO Auto-generated method stub
}
public void aboutToBeShown() {
refresh();
}
public class PortTypeColumn extends ColumnTableProvider.Column implements ILabelProvider, ICellModifier {
public String getHeaderText() { return Messages.BPELPartnerLinkRolesSection_Role_PortType; }
public String getProperty() { return PartnerlinktypeConstants.PORT_TYPE_ATTRIBUTE; } //$NON-NLS-1$
public int getInitialWeight() { return 10; }
public CellEditor createCellEditor(Composite parent) {
return WSDLComponentSelectionDialogPropertyDescriptor.createCellEditor(parent, editor, WSDLConstants.PORT_TYPE, null);
}
public String getText(Object element) {
if (((Role)element).getElement().hasAttribute(PartnerlinktypeConstants.PORT_TYPE_ATTRIBUTE))
return ((Role)element).getElement().getAttribute(PartnerlinktypeConstants.PORT_TYPE_ATTRIBUTE);
else
return "";
}
public boolean canModify(Object element, String property) {
return true;
}
public Object getValue(Object element, String property) {
return ((Role)element).getElement().getAttribute(PartnerlinktypeConstants.PORT_TYPE_ATTRIBUTE);
}
public void modify(Object element, String property, Object value) {
((Role)element).getElement().setAttribute(PartnerlinktypeConstants.PORT_TYPE_ATTRIBUTE, (String)value);
refresh();
}
}
public class NameColumn extends ColumnTableProvider.Column implements ILabelProvider, ICellModifier {
public String getHeaderText() { return Messages.BPELPartnerLinkRolesSection_Role_Name; }
public String getProperty() { return PartnerlinktypeConstants.NAME_ATTRIBUTE; } //$NON-NLS-1$
public int getInitialWeight() { return 10; }
public CellEditor createCellEditor(Composite parent) {
CellEditor result = new TextCellEditor();
result.create(parent);
return result;
}
public String getText(Object element) {
return ((Role)element).getName();
}
public boolean canModify(Object element, String property) {
return true;
}
public Object getValue(Object element, String property) {
return ((Role)element).getName();
}
public void modify(Object element, String property, Object value) {
((Role)element).setName((String)value);
refresh();
}
}
public void createControls(Composite parent, TabbedPropertySheetPage page) {
FlatFormData data;
Composite composite = page.getWidgetFactory().createFlatFormComposite(parent);
FlatFormLayout formLayout = new FlatFormLayout();
formLayout.marginWidth = formLayout.marginHeight = 0;
composite.setLayout(formLayout);
addButton = page.getWidgetFactory().createButton(composite, Messages.BPELPartnerLinkRolesSection_Add, SWT.PUSH);
removeButton = page.getWidgetFactory().createButton(composite, Messages.BPELPartnerLinkRolesSection_Remove, SWT.PUSH);
Label rolesLabel = page.getWidgetFactory().createLabel(composite, Messages.BPELPartnerLinkRolesSection_Roles);
rolesTable = page.getWidgetFactory().createTable(composite, SWT.FULL_SELECTION | SWT.V_SCROLL);
data = new FlatFormData();
data.left = new FlatFormAttachment(0, 0);
data.top = new FlatFormAttachment(0, 0);
rolesLabel.setLayoutData(data);
data = new FlatFormData();
data.width = BPELUtil.calculateButtonWidth(addButton, BPELPropertySection.STANDARD_BUTTON_WIDTH);
data.right = new FlatFormAttachment(removeButton, -IDetailsAreaConstants.HSPACE);
data.top = new FlatFormAttachment(0, 0);
addButton.setLayoutData(data);
data = new FlatFormData();
data.width = BPELUtil.calculateButtonWidth(removeButton, BPELPropertySection.STANDARD_BUTTON_WIDTH);
data.right = new FlatFormAttachment(100, 0);
data.top = new FlatFormAttachment(0, 0);
removeButton.setLayoutData(data);
removeButton.setEnabled(false);
addButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
Action action = new AddElementAction("Add role",getPartnerLinkType().getElement(),getPartnerLinkType().getElement().getPrefix(),PartnerlinktypeConstants.ROLE_ELEMENT_TAG){
protected void addAttributes(Element newElement) {
newElement.setAttribute(PartnerlinktypeConstants.NAME_ATTRIBUTE, "NCName");
}
};
action.run();
updateButtonEnablement();
if (tableCursor != null)
tableCursor.refresh();
}
public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); }
});
Listener removeListener = new Listener() {
public void handleEvent(Event e) {
if (e.type == SWT.KeyUp && e.character != SWT.DEL) return;
int selectionIndex = rolesTable.getSelectionIndex();
IStructuredSelection sel = (IStructuredSelection)rolesViewer.getSelection();
Action action = new DeleteAction(((IStructuredSelection)sel).getFirstElement(),null);
action.run();
// selects the element at the deleted element position
int items = rolesTable.getItemCount();
if (items > 0) {
selectionIndex = (selectionIndex < items) ? selectionIndex : 0;
rolesTable.setSelection(selectionIndex);
}
if (tableCursor != null)
tableCursor.refresh();
updateButtonEnablement();
}
};
rolesTable.addListener(SWT.KeyUp, removeListener);
removeButton.addListener(SWT.Selection, removeListener);
removeButton.addListener(SWT.DefaultSelection, removeListener);
data = new FlatFormData();
data.left = new FlatFormAttachment(0, 0);
data.right = new FlatFormAttachment(100, 0);
data.top = new FlatFormAttachment(addButton, IDetailsAreaConstants.VSPACE);
data.bottom = new FlatFormAttachment(100, 0);
rolesTable.setLayoutData(data);
rolesTable.setLinesVisible(true);
rolesTable.setHeaderVisible(true);
tableProvider = new ColumnTableProvider();
tableProvider.add(new NameColumn());
tableProvider.add(new PortTypeColumn());
rolesTable.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
removeButton.setEnabled(!rolesViewer.getSelection().isEmpty());
}
public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); }
});
rolesViewer = new TableViewer(rolesTable);
tableProvider.createTableLayout(rolesTable);
rolesViewer.setLabelProvider(tableProvider);
rolesViewer.setCellModifier(tableProvider);
rolesViewer.setContentProvider(new AbstractContentProvider(){
public Object[] getElements(Object inputElement) {
// TODO Auto-generated method stub
return ((PartnerLinkType)inputElement).getRole().toArray();
}
});
// TODO: should this have a sorter?
rolesViewer.setColumnProperties(tableProvider.getColumnProperties());
rolesViewer.addSelectionChangedListener(new ISelectionChangedListener(){
public void selectionChanged(SelectionChangedEvent event) {
updateButtonEnablement();
}
});
tableCursor = BPELUtil.createTableCursor(rolesTable, rolesViewer);
}
protected void updateButtonEnablement(){
boolean hasSelection = !rolesViewer.getSelection().isEmpty();
removeButton.setEnabled(hasSelection && getPartnerLinkType().getRole().size() == 2);
addButton.setEnabled(getPartnerLinkType().getRole().size() < 2);
}
public void dispose() {
// TODO Auto-generated method stub
}
public void refresh(){
rolesViewer.refresh();
}
public int getMinimumHeight() {
// TODO Auto-generated method stub
return SWT.DEFAULT;
}
public void setInput(IWorkbenchPart arg0, ISelection selection) {
Assert.isTrue(selection instanceof IStructuredSelection);
plink = (PartnerLinkType)((IStructuredSelection)selection).getFirstElement();
editor = (WSDLEditor)arg0;
rolesViewer.setCellEditors(tableProvider.createCellEditors(rolesTable));
rolesViewer.setInput(plink);
updateButtonEnablement();
}
public PartnerLinkType getPartnerLinkType() {
return plink;
}
public boolean shouldUseExtraSpace() {
// TODO Auto-generated method stub
return true;
}
}