blob: 121302f2d192ff3b3bf1d37d7c628c6b28c89fec [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.util;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.bpmn2.modeler.ui.property.dialogs.DefaultSchemaImportDialog;
import org.eclipse.bpmn2.modeler.ui.property.dialogs.SchemaImportDialog;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jdt.core.Flags;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.LabelProvider;
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.layout.GridLayout;
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;
/**
* This is a specialized Java Type Import dialog for importing BPMN2 Interface definitions.
* It extends the default import dialog by adding a checkbox that allows the user to select
* whether or not Process variables (a.k.a. BPMN2 "Property" elements) will be created.
*/
public class JbpmInterfaceImportDialog extends DefaultSchemaImportDialog {
boolean createVariables = false;
CheckboxTableViewer methodsTable;
IMethod[] selectedMethods = new IMethod[0];
public JbpmInterfaceImportDialog() {
super(Display.getDefault().getActiveShell(), SchemaImportDialog.ALLOW_JAVA);
}
@Override
public Control createDialogArea(Composite parent) {
Composite contents = (Composite) super.createDialogArea(parent);
Composite tableComposite = new Composite(contents, SWT.NONE);
GridLayout layout = new GridLayout(3,false);
layout.marginWidth = 0;
tableComposite.setLayout(layout);
tableComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true,1,1));
Label label = new Label(tableComposite,SWT.NONE);
label.setText( Messages.JbpmInterfaceImportDialog_Available_Methods);
label.setLayoutData(new GridData(SWT.LEFT,SWT.TOP,true,false,1,1));
final Button selectAllButton = new Button(tableComposite, SWT.PUSH);
selectAllButton.setText(Messages.JbpmInterfaceImportDialog_Select_All);
selectAllButton.setLayoutData(new GridData(SWT.RIGHT,SWT.TOP,false,false,1,1));
final Button selectNoneButton = new Button(tableComposite, SWT.PUSH);
selectNoneButton.setText(Messages.JbpmInterfaceImportDialog_Select_None);
selectNoneButton.setLayoutData(new GridData(SWT.RIGHT,SWT.TOP,false,false,1,1));
methodsTable = CheckboxTableViewer.newCheckList(tableComposite, SWT.CHECK | SWT.BORDER);
methodsTable.getTable().setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true,3,1));
methodsTable.setLabelProvider(new LabelProvider() {
@Override
public String getText(Object element) {
return element.toString().replaceFirst("\\) \\[in .*", ")"); //$NON-NLS-1$ //$NON-NLS-2$
}
});
selectAllButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
methodsTable.setAllChecked(true);
}
});
selectNoneButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
methodsTable.setAllChecked(false);
}
});
final Button createVariablesbutton = new Button(contents, SWT.CHECK);
createVariablesbutton.setText(Messages.JbpmImportDialog_Create_Process_Variables_Label);
createVariablesbutton.setSelection(createVariables);
createVariablesbutton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
createVariables = createVariablesbutton.getSelection();
}
});
return contents;
}
protected void updateStatus(IStatus status) {
super.updateStatus(status);
if (status == Status.OK_STATUS) {
// fill the Methods selection box
if (methodsTable!=null) {
IMethod methods[] = getAllMethods();
methodsTable.getTable().removeAll();
if (methods.length>0) {
methodsTable.add(methods);
}
}
}
}
public boolean isCreateVariables() {
return createVariables;
}
public void setCreateVariables(boolean createVariables) {
this.createVariables = createVariables;
}
public IType getIType() {
Object result[] = getResult();
if (result!=null && result.length == 1 && result[0] instanceof IType) {
return (IType) result[0];
}
return null;
}
@Override
protected void computeResult() {
super.computeResult();
if (methodsTable!=null) {
Object[] checked = methodsTable.getCheckedElements();
selectedMethods = new IMethod[checked.length];
for (int i=0; i<checked.length; ++i)
selectedMethods[i] = (IMethod) checked[i];
}
else
selectedMethods = new IMethod[0];
}
public IMethod[] getAllMethods() {
List<IMethod> methods = new ArrayList<IMethod>();
IType type = getIType();
if (type!=null) {
try {
for (IMethod method : type.getMethods()) {
if (method.isConstructor()) {
// don't create Operations for Constructors
continue;
}
if (method.getElementName().contains("<")) { //$NON-NLS-1$
continue;
}
if ((method.getFlags() & Flags.AccPublic) == 0) {
continue;
}
if (method.getNumberOfParameters()==1)
methods.add(method);
}
} catch (JavaModelException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return methods.toArray(new IMethod[methods.size()]);
}
public IMethod[] getIMethods() {
return selectedMethods;
}
}