01: package org.drools.eclipse.rulebuilder.ui;
02:
03: import org.drools.brms.client.modeldriven.brl.ActionFieldValue;
04: import org.drools.brms.client.modeldriven.brl.ActionSetField;
05: import org.eclipse.swt.SWT;
06: import org.eclipse.swt.events.ModifyEvent;
07: import org.eclipse.swt.events.ModifyListener;
08: import org.eclipse.swt.widgets.Combo;
09: import org.eclipse.swt.widgets.Composite;
10: import org.eclipse.swt.widgets.Control;
11: import org.eclipse.swt.widgets.Shell;
12:
13: /**
14: * @author Anton Arhipov
15: * @author Ahti Kitsik
16: *
17: */
18: public class ActionSetFieldDialog extends RuleDialog {
19:
20: private String[] fieldCompletions;
21:
22: private RuleModeller modeller;
23:
24: private ActionSetField field;
25:
26: private String variableClass;
27:
28: public ActionSetFieldDialog(Shell parent, RuleModeller modeller,
29: ActionSetField field, String[] fieldCompletions,
30: String variableClass) {
31: super (parent, "Add a field", "Add a field");
32:
33: this .fieldCompletions = fieldCompletions;
34: this .modeller = modeller;
35: this .field = field;
36: this .variableClass = variableClass;
37: }
38:
39: protected Control createDialogArea(final Composite parent) {
40: Composite composite = (Composite) super
41: .createDialogArea(parent);
42: createLabel(composite, "Add a field");
43:
44: final Combo fieldsCombo = new Combo(parent, SWT.READ_ONLY);
45: fieldsCombo.add("Choose field...");
46: for (int i = 0; i < fieldCompletions.length; i++) {
47: fieldsCombo.add(fieldCompletions[i]);
48: }
49: fieldsCombo.select(0);
50:
51: fieldsCombo.addModifyListener(new ModifyListener() {
52: public void modifyText(ModifyEvent e) {
53: if (fieldsCombo.getSelectionIndex() == 0) {
54: return; // no need to change anything
55: }
56:
57: String fieldType = modeller
58: .getSuggestionCompletionEngine().getFieldType(
59: variableClass, fieldsCombo.getText());
60: field.addFieldValue(new ActionFieldValue(fieldsCombo
61: .getText(), "", fieldType));
62:
63: getShell().getDisplay().asyncExec(new Runnable() {
64:
65: public void run() {
66: modeller.reloadRhs();
67: modeller.setDirty(true);
68: close();
69: }
70:
71: });
72: }
73: });
74:
75: return composite;
76: }
77:
78: }
|