001: package org.drools.eclipse.rulebuilder.ui;
002:
003: import org.drools.brms.client.modeldriven.brl.CompositeFactPattern;
004: import org.drools.brms.client.modeldriven.brl.FactPattern;
005: import org.drools.eclipse.rulebuilder.modeldriven.HumanReadable;
006: import org.eclipse.swt.SWT;
007: import org.eclipse.swt.graphics.Color;
008: import org.eclipse.swt.layout.GridData;
009: import org.eclipse.swt.layout.GridLayout;
010: import org.eclipse.swt.widgets.Composite;
011: import org.eclipse.swt.widgets.Display;
012: import org.eclipse.swt.widgets.Label;
013: import org.eclipse.swt.widgets.MessageBox;
014: import org.eclipse.ui.forms.events.HyperlinkEvent;
015: import org.eclipse.ui.forms.events.IHyperlinkListener;
016: import org.eclipse.ui.forms.widgets.FormToolkit;
017: import org.eclipse.ui.forms.widgets.ImageHyperlink;
018:
019: /**
020: * This is the new smart widget that works off the model.
021: *
022: * @author Anton Arhipov
023: * @author Ahti Kitsik
024: *
025: */
026: public class CompositeFactPatternWidget extends Widget {
027:
028: private final CompositeFactPattern pattern;
029:
030: public CompositeFactPatternWidget(FormToolkit toolkit,
031: Composite parent, RuleModeller mod,
032: CompositeFactPattern factPattern, int idx) {
033:
034: super (parent, toolkit, mod, idx);
035: this .pattern = factPattern;
036:
037: GridLayout layout = new GridLayout();
038: layout.numColumns = 4;
039: layout.marginBottom = 0;
040: layout.marginHeight = 0;
041: layout.marginLeft = 0;
042: layout.marginRight = 0;
043: layout.marginTop = 0;
044: layout.marginWidth = 0;
045: layout.verticalSpacing = 2;
046: parent.setLayout(layout);
047:
048: create();
049: }
050:
051: private void create() {
052: Label l = toolkit.createLabel(parent, HumanReadable
053: .getCEDisplayName(pattern.type));
054:
055: GridData labelGD = new GridData(GridData.FILL_BOTH
056: | GridData.GRAB_HORIZONTAL);
057: labelGD.horizontalSpan = 2;
058: //labelGD.verticalAlignment = SWT.CENTER;
059: //labelGD.horizontalAlignment = SWT.CENTER;
060: l.setLayoutData(labelGD);
061: l.setBackground(new Color(parent.getShell().getDisplay(), 240,
062: 240, 240));
063:
064: l.setLayoutData(labelGD);
065: addDeleteAction();
066: addMoreOptionsAction();
067: Composite composite = toolkit.createComposite(parent);
068:
069: GridData gd = new GridData(GridData.FILL_HORIZONTAL);
070: gd.horizontalAlignment = SWT.CENTER;
071: composite.setLayoutData(gd);
072:
073: createFactRows(toolkit, composite);
074: }
075:
076: protected void addDeleteAction() {
077: ImageHyperlink delWholeLink = addImage(parent,
078: "icons/delete_obj.gif");
079: delWholeLink.addHyperlinkListener(new IHyperlinkListener() {
080: public void linkActivated(HyperlinkEvent e) {
081: MessageBox dialog = new MessageBox(Display.getCurrent()
082: .getActiveShell(), SWT.YES | SWT.NO
083: | SWT.ICON_WARNING);
084: dialog
085: .setMessage("Remove this ENTIRE condition, "
086: + "and all the field constraints that belong to it.");
087: dialog.setText("Remove this entire condition?");
088: if (dialog.open() == SWT.YES) {
089:
090: if (getModeller().getModel().removeLhsItem(index)) {
091: getModeller().reloadLhs();
092: getModeller().setDirty(true);
093: } else {
094: showMessage("Can't remove that item as it is used in the action part of the rule.");
095: }
096: }
097: }
098:
099: public void linkEntered(HyperlinkEvent e) {
100: }
101:
102: public void linkExited(HyperlinkEvent e) {
103: }
104: });
105: delWholeLink
106: .setToolTipText("Remove the entire composite condition.");
107: }
108:
109: private void addMoreOptionsAction() {
110: final ImageHyperlink link = addImage(parent,
111: // "icons/add_field_to_fact.gif");
112: "icons/new_item.gif");
113:
114: link.addHyperlinkListener(new IHyperlinkListener() {
115: public void linkActivated(HyperlinkEvent e) {
116: RuleDialog popup = new AddNewFactConstraintDialog(
117: parent.getShell(), getModeller(), pattern);
118: popup.open();
119: }
120:
121: public void linkEntered(HyperlinkEvent e) {
122: }
123:
124: public void linkExited(HyperlinkEvent e) {
125: }
126: });
127: link.setToolTipText("Add a fact to this constraint. "
128: + "If it is an 'or' type, it will need at least 2.");
129: }
130:
131: private void createFactRows(FormToolkit toolkit,
132: Composite constraintComposite) {
133:
134: if (pattern.patterns != null) {
135: FactPattern[] facts = pattern.patterns;
136: for (int i = 0; i < facts.length; i++) {
137:
138: new FactPatternWidget(toolkit, constraintComposite,
139: getModeller(), facts[i], pattern, i, false);
140:
141: toolkit.createLabel(constraintComposite, "");
142: toolkit.createLabel(constraintComposite, "");
143: }
144: }
145: }
146:
147: }
|