All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jbpm.designer.client.util.ComboBox Maven / Gradle / Ivy

There is a newer version: 7.73.0.Final
Show newest version
/*
 * Copyright 2015 Red Hat, Inc. and/or its affiliates.
 *
 * 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.jbpm.designer.client.util;

import java.util.List;
import javax.inject.Inject;

import org.gwtbootstrap3.client.ui.TextBox;
import org.gwtbootstrap3.client.ui.ValueListBox;
import org.jbpm.designer.client.shared.util.StringUtils;

public class ComboBox implements ComboBoxView.ComboBoxPresenter {

    protected ListBoxValues listBoxValues;

    protected boolean showCustomValues = false;

    protected String currentTextValue = "";

    protected boolean quoteStringValues;

    protected String customPrompt;

    @Inject
    ComboBoxView view;

    @Override
    public void init(final ComboBoxView.ModelPresenter modelPresenter, final ValueListBox listBox, final TextBox textBox,
            final boolean quoteStringValues,
            final String customPrompt, final String placeholder) {
        this.quoteStringValues = quoteStringValues;
        this.customPrompt = customPrompt;

        view.init(this, modelPresenter, listBox, textBox, placeholder);
    }

    @Override
    public String getValue() {
        return view.getValue();
    }

    @Override
    public void setListBoxValues(final ListBoxValues listBoxValues) {
        this.listBoxValues = listBoxValues;
    }

    @Override
    public void setShowCustomValues(final boolean showCustomValues) {
        this.showCustomValues = showCustomValues;
    }

    @Override
    public void setCurrentTextValue(String currentTextValue) {
        this.currentTextValue = currentTextValue;
    }

    @Override
    public ListBoxValues getListBoxValues() {
        return listBoxValues;
    }

    @Override
    public void updateListBoxValues(String listBoxValue) {
        if (showCustomValues) {
            List updatedValues = listBoxValues.update(listBoxValue);
            view.setAcceptableValues(updatedValues);
        } else {
            List values = listBoxValues.getAcceptableValuesWithoutCustomValues();
            view.setAcceptableValues(values);
        }
    }

    @Override
    public void listBoxValueChanged(String newValue) {
        if (customPrompt.equals(newValue)) {
            // "Custom..." selected, show textBox with empty value
            setListBoxValue("");
            setTextBoxValue("");
            view.setListBoxVisible(false);
            view.setTextBoxVisible(true);
            view.setTextBoxFocus(true);
        } else if (newValue.startsWith("*")) {
            // Not a valid value
            setListBoxValue("");
            setTextBoxValue("");
        } else if (newValue.startsWith(listBoxValues.getEditPrefix())) {
            // "Edit  ..." selected, show textBox with appropriate value
            String quotedValue = view.getModelValue();
            String unquotedValue = StringUtils.createUnquotedConstant(quotedValue);
            setTextBoxValue(unquotedValue);
            view.setListBoxVisible(false);
            view.setTextBoxVisible(true);
            view.setTextBoxFocus(true);
        } else if (listBoxValues.isCustomValue(newValue)) {
            // A Custom value has been selected
            String textValue = newValue;
            if (quoteStringValues) {
                String unquotedValue = StringUtils.createUnquotedConstant(newValue);
                textValue = unquotedValue;
            }
            setListBoxValue(newValue);
            setTextBoxValue(textValue);
        } else if (newValue != null) {
            // A non-custom value has been selected
            setListBoxValue(newValue);
            setTextBoxValue("");
        }
        updateListBoxValues(view.getListBoxValue());
    }

    @Override
    public void textBoxValueChanged(String newValue) {
        if (newValue != null) {
            if (!quoteStringValues) {
                newValue = newValue.trim();
            }
            if (!newValue.isEmpty()) {
                String nonCustomValue = listBoxValues.getNonCustomValueForUserString(newValue);
                if (nonCustomValue != null) {
                    setListBoxValue(nonCustomValue);
                    setTextBoxValue("");
                    currentTextValue = "";
                } else {
                    String oldValue = currentTextValue;
                    addCustomValueToListBoxValues(newValue, oldValue);
                    if (quoteStringValues) {
                        newValue = StringUtils.createQuotedConstant(newValue);
                    }
                    setTextBoxValue(newValue);
                    setListBoxValue(newValue);
                    currentTextValue = newValue;
                }
            } else {
                // Set the value even if it's ""
                setTextBoxValue(newValue);
                setListBoxValue(newValue);
                currentTextValue = newValue;
            }
        }
        view.setTextBoxVisible(false);
        view.setListBoxVisible(true);
    }

    @Override
    public void addCustomValueToListBoxValues(String newValue, String oldValue) {
        if (quoteStringValues) {
            newValue = StringUtils.createQuotedConstant(newValue);
            oldValue = StringUtils.createQuotedConstant(oldValue);
        }
        listBoxValues.addCustomValue(newValue, oldValue);
    }

    public void setTextBoxValue(String value) {
        view.setTextBoxValue(value);
        view.setTextBoxModelValue(value);
    }

    public void setListBoxValue(String value) {
        view.setListBoxValue(value);
        view.setListBoxModelValue(value);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy