org.drools.guvnor.client.modeldriven.ui.EnumDropDownLabel.java Source code

Java tutorial

Introduction

Here is the source code for org.drools.guvnor.client.modeldriven.ui.EnumDropDownLabel.java

Source

/**
 * 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.guvnor.client.modeldriven.ui;

import org.drools.guvnor.client.common.DropDownValueChanged;
import org.drools.guvnor.client.messages.Constants;
import org.drools.ide.common.client.modeldriven.DropDownData;
import org.drools.ide.common.client.modeldriven.SuggestionCompletionEngine;
import org.drools.ide.common.client.modeldriven.brl.BaseSingleFieldConstraint;
import org.drools.ide.common.client.modeldriven.brl.FactPattern;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.PopupPanel;

/**
 * 
 * @author Toni Rikkola
 */
public class EnumDropDownLabel extends Composite {

    private Constants constants = ((Constants) GWT.create(Constants.class));
    protected Panel panel = new HorizontalPanel();

    // The value is not always same as the text
    private final Label textWidget;

    private final EnumDropDown enumDropDown;

    private final Button okButton = new Button(constants.OK());

    private Command onValueChangeCommand;

    public EnumDropDownLabel(FactPattern pattern, String fieldName, SuggestionCompletionEngine sce,
            BaseSingleFieldConstraint constraint) {
        this.textWidget = getTextLabel();
        this.enumDropDown = getEnumDropDown(constraint, sce, pattern, fieldName);

        panel.add(textWidget);

        initWidget(panel);

    }

    private Label getTextLabel() {
        Label label = new Label();
        label.setStyleName("x-form-field");
        label.addClickHandler(new ClickHandler() {

            public void onClick(ClickEvent event) {
                showPopup();

            }
        });
        if (label.getText() == null && "".equals(label.getText())) {
            label.setText(constants.Value());
        }

        return label;
    }

    private void showPopup() {
        final PopupPanel popup = new PopupPanel();
        popup.setGlassEnabled(true);
        HorizontalPanel horizontalPanel = new HorizontalPanel();

        popup.setPopupPosition(this.getAbsoluteLeft(), this.getAbsoluteTop());

        okButton.addClickHandler(new ClickHandler() {

            public void onClick(ClickEvent event) {
                executeOnValueChangeCommand();
                panel.clear();
                panel.add(textWidget);
                popup.hide();

            }
        });

        horizontalPanel.add(enumDropDown);
        horizontalPanel.add(okButton);

        popup.add(horizontalPanel);

        popup.show();

    }

    private EnumDropDown getEnumDropDown(final BaseSingleFieldConstraint constraint, SuggestionCompletionEngine sce,
            FactPattern pattern, String fieldName) {
        String valueType = sce.getFieldType(pattern.factType, fieldName);

        final DropDownData dropDownData;
        if (SuggestionCompletionEngine.TYPE_BOOLEAN.equals(valueType)) {
            dropDownData = DropDownData.create(new String[] { "true", "false" }); //NON-NLS
        } else {
            dropDownData = sce.getEnums(pattern, fieldName);
        }

        final EnumDropDown box = new EnumDropDown(constraint.getValue(), new DropDownValueChanged() {
            public void valueChanged(String newText, String newValue) {
                textWidget.setText(newText);
                constraint.setValue(newValue);
                okButton.click();
            }
        }, dropDownData);

        if (box.getItemCount() > 6) {
            box.setVisibleItemCount(6);
        } else {
            box.setVisibleItemCount(box.getItemCount());
        }

        return box;
    }

    private void executeOnValueChangeCommand() {
        if (this.onValueChangeCommand != null) {
            this.onValueChangeCommand.execute();
        }
    }

    public void setOnValueChangeCommand(Command onValueChangeCommand) {
        this.onValueChangeCommand = onValueChangeCommand;
    }

}