Package org.drools.eclipse.rulebuilder.ui

Source Code of org.drools.eclipse.rulebuilder.ui.ActionSetFieldWidget

/*
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.drools.eclipse.rulebuilder.ui;

import org.drools.eclipse.rulebuilder.modeldriven.HumanReadable;
import org.drools.ide.common.client.modeldriven.SuggestionCompletionEngine;
import org.drools.ide.common.client.modeldriven.brl.ActionFieldValue;
import org.drools.ide.common.client.modeldriven.brl.ActionSetField;
import org.drools.ide.common.client.modeldriven.brl.ActionUpdateField;
import org.drools.ide.common.client.modeldriven.brl.FactPattern;
import org.drools.ide.common.client.modeldriven.brl.RuleModel;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.events.HyperlinkEvent;
import org.eclipse.ui.forms.events.IHyperlinkListener;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ImageHyperlink;

public class ActionSetFieldWidget extends Widget {

    private ActionSetField set;

    final private String[] fieldCompletions;

    private boolean isBoundFact = false;

    private String variableClass;

    public ActionSetFieldWidget(FormToolkit toolkit, Composite parent,
            RuleModeller mod, RuleModel rule, ActionSetField set, int index) {

        super(parent, toolkit, mod, index);

        this.set = set;

        if (getCompletion().isGlobalVariable(set.variable)) {
            this.fieldCompletions = getCompletion()
                    .getFieldCompletionsForGlobalVariable(set.variable);
            this.variableClass = (String) getCompletion().getGlobalVariable(set.variable);
        } else {
            FactPattern pattern = rule.getBoundFact(set.variable);
            this.fieldCompletions = getCompletion().getFieldCompletions(
                    pattern.getFactType());
            this.isBoundFact = true;
            this.variableClass = pattern.getFactType();
        }

        GridLayout l = new GridLayout();
        l.numColumns = 6;
        l.marginBottom = 0;
        l.marginHeight = 0;
        l.marginLeft = 0;
        l.marginRight = 0;
        l.marginTop = 0;
        l.marginWidth = 0;
        l.verticalSpacing = 0;
        parent.setLayout(l);

        create();

    }

    private void create() {
        String modifyType = "set";
        if (this.set instanceof ActionUpdateField) {
            modifyType = "modify";
        }

        toolkit.createLabel(parent, HumanReadable
                .getActionDisplayName(modifyType)
                + " [" + this.set.variable + "]");
        addDeleteRHSAction();
        addMoreOptionsAction();
        addRows();
    }

    private void addRows() {
        Composite constraintComposite = toolkit.createComposite(parent);
        GridLayout constraintLayout = new GridLayout();
        constraintLayout.numColumns = 3;
        constraintComposite.setLayout(constraintLayout);

        for (int i = 0; i < set.fieldValues.length; i++) {
            ActionFieldValue val = set.fieldValues[i];
            toolkit.createLabel(constraintComposite, val.field);
            valueEditor(constraintComposite, val);
            addRemoveFieldAction(constraintComposite, i);
        }

        toolkit.paintBordersFor(constraintComposite);
    }

    private void addMoreOptionsAction() {
        // ImageHyperlink link = addImage(parent,
        // "icons/add_field_to_fact.gif");
        ImageHyperlink link = addImage(parent, "icons/new_item.gif");

        link.addHyperlinkListener(new IHyperlinkListener() {
            public void linkActivated(HyperlinkEvent e) {
                RuleDialog popup = new ActionSetFieldDialog(parent.getShell(),
                        getModeller(), set, fieldCompletions, variableClass);
                popup.open();

            }

            public void linkEntered(HyperlinkEvent e) {
            }

            public void linkExited(HyperlinkEvent e) {
            }
        });
        link.setToolTipText("Add a field");
    }

    private void addRemoveFieldAction(Composite constraintComposite,
            final int currentRow) {
        ImageHyperlink delLink = addImage(constraintComposite,
                "icons/delete_item_small.gif");
        delLink.setToolTipText("Remove this field action");
        delLink.addHyperlinkListener(new IHyperlinkListener() {
            public void linkActivated(HyperlinkEvent e) {
                MessageBox dialog = new MessageBox(Display.getCurrent()
                        .getActiveShell(), SWT.YES | SWT.NO | SWT.ICON_WARNING);
                dialog.setMessage("Remove this item?");
                dialog.setText("Remove this item?");
                if (dialog.open() == SWT.YES) {
                    set.removeField(currentRow);
                    getModeller().setDirty(true);
                    getModeller().reloadRhs();
                }
            }

            public void linkEntered(HyperlinkEvent e) {
            }

            public void linkExited(HyperlinkEvent e) {
            }
        });
    }

    private void valueEditor(Composite parent, final ActionFieldValue val) {
        final Text box = toolkit.createText(parent, "");

        if (val.value != null) {
            box.setText(val.value);
        }

        GridData gd = new GridData( GridData.FILL_HORIZONTAL );
        gd.grabExcessHorizontalSpace = true;
        gd.minimumWidth = 100;
        box.setLayoutData( gd );

        box.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                val.value = box.getText();
                getModeller().setDirty(true);
            }
        });

        if (val.type.equals(SuggestionCompletionEngine.TYPE_NUMERIC)) {
            new NumericKeyFilter(box);
        }

    }

    private SuggestionCompletionEngine getCompletion() {
        return getModeller().getSuggestionCompletionEngine();
    }

}
TOP

Related Classes of org.drools.eclipse.rulebuilder.ui.ActionSetFieldWidget

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.