001: package org.drools.eclipse.rulebuilder.ui;
002:
003: import org.drools.brms.client.modeldriven.brl.CompositeFieldConstraint;
004: import org.drools.brms.client.modeldriven.brl.FactPattern;
005: import org.drools.brms.client.modeldriven.brl.SingleFieldConstraint;
006: import org.eclipse.swt.SWT;
007: import org.eclipse.swt.layout.GridData;
008: import org.eclipse.swt.layout.GridLayout;
009: import org.eclipse.swt.widgets.Combo;
010: import org.eclipse.swt.widgets.Composite;
011: import org.eclipse.swt.widgets.Control;
012: import org.eclipse.swt.widgets.Event;
013: import org.eclipse.swt.widgets.Listener;
014: import org.eclipse.swt.widgets.Shell;
015:
016: public class AddCompositeConstraintOptionDialog extends RuleDialog {
017:
018: private RuleModeller modeller;
019:
020: private FactPattern pattern;
021:
022: private final CompositeFieldConstraint constraint;
023:
024: public AddCompositeConstraintOptionDialog(Shell parent,
025: RuleModeller modeller, CompositeFieldConstraint constraint,
026: FactPattern pattern) {
027: super (parent, "Add fields to this constriant",
028: "Pick the value from combo.");
029:
030: this .modeller = modeller;
031: this .constraint = constraint;
032: this .pattern = pattern;
033: }
034:
035: protected Control createDialogArea(final Composite parent) {
036: Composite composite = (Composite) super
037: .createDialogArea(parent);
038:
039: GridLayout l = new GridLayout();
040: l.numColumns = 3;
041: l.marginBottom = 0;
042: l.marginHeight = 0;
043: l.marginLeft = 0;
044: l.marginRight = 0;
045: l.marginTop = 0;
046: l.marginWidth = 0;
047: composite.setLayout(l);
048:
049: GridData gd = new GridData(GridData.FILL_HORIZONTAL);
050: gd.horizontalSpan = 2;
051:
052: createFieldRestrictionCombo(composite, gd);
053: createMultiFieldCombo(composite, gd);
054:
055: return composite;
056: }
057:
058: private void createFieldRestrictionCombo(Composite composite,
059: GridData gd) {
060: createLabel(composite, "Add a restriction on a field");
061: final Combo combo = new Combo(composite, SWT.READ_ONLY);
062: combo.setLayoutData(gd);
063: combo.add("...");
064: String[] fields = this .modeller.getSuggestionCompletionEngine()
065: .getFieldCompletions(this .pattern.factType);
066: for (int i = 0; i < fields.length; i++) {
067: combo.add(fields[i]);
068: }
069: combo.select(0);
070:
071: combo.addListener(SWT.Selection, new Listener() {
072: public void handleEvent(Event event) {
073: if (combo.getSelectionIndex() == 0) {
074: return;
075: }
076:
077: constraint.addConstraint(new SingleFieldConstraint(
078: combo.getText()));
079: modeller.setDirty(true);
080: modeller.reloadLhs();
081: close();
082: }
083: });
084:
085: }
086:
087: private void createMultiFieldCombo(Composite composite, GridData gd) {
088: createLabel(composite, "Multiple field constraint");
089: final Combo combo = new Combo(composite, SWT.READ_ONLY);
090: combo.setLayoutData(gd);
091: combo.add("...");
092: combo.add("All of (And)");
093: combo.add("Any of (Or)");
094: combo.setData("All of (And)",
095: CompositeFieldConstraint.COMPOSITE_TYPE_AND);
096: combo.setData("Any of (Or)",
097: CompositeFieldConstraint.COMPOSITE_TYPE_OR);
098: combo.select(0);
099:
100: combo.addListener(SWT.Selection, new Listener() {
101: public void handleEvent(Event event) {
102: if (combo.getSelectionIndex() == 0) {
103: return;
104: }
105: CompositeFieldConstraint comp = new CompositeFieldConstraint();
106: comp.compositeJunctionType = combo.getText();
107: constraint.addConstraint(comp);
108:
109: modeller.reloadLhs();
110: modeller.setDirty(true);
111: close();
112: }
113: });
114:
115: }
116:
117: }
|