fr.amapj.view.engine.enumselector.EnumSearcher.java Source code

Java tutorial

Introduction

Here is the source code for fr.amapj.view.engine.enumselector.EnumSearcher.java

Source

/*
 *  Copyright 2013-2018 Emmanuel BRUN (contact@amapj.fr)
 * 
 *  This file is part of AmapJ.
 *  
 *  AmapJ is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU Affero General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
    
 *  AmapJ is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Affero General Public License for more details.
 *
 *  You should have received a copy of the GNU Affero General Public License
 *  along with AmapJ.  If not, see <http://www.gnu.org/licenses/>.
 * 
 * 
 */
package fr.amapj.view.engine.enumselector;

import java.util.EnumSet;

import com.vaadin.data.fieldgroup.FieldGroup;
import com.vaadin.server.FontAwesome;
import com.vaadin.shared.ui.label.ContentMode;
import com.vaadin.ui.Button;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.HorizontalLayout;

import fr.amapj.common.AmapjRuntimeException;
import fr.amapj.common.GenericUtils.ToString;
import fr.amapj.model.engine.metadata.MetaDataEnum;
import fr.amapj.model.engine.metadata.MetaDataEnum.HelpInfo;
import fr.amapj.view.engine.popup.corepopup.CorePopup.ColorStyle;
import fr.amapj.view.engine.popup.messagepopup.MessagePopup;

public class EnumSearcher {

    /**
     * Permet de crer une combo box permettant de choisir parmi une liste de Enum
     * avec possibilit d'indiquer comment afficher les libelles 
     *  
     * @param binder
     * @param title
     * @param enumeration donne la liste  afficher
     * @param propertyId
     * @return
     */
    static public <T extends Enum<T>> HorizontalLayout createEnumSearcher(FieldGroup binder, String title,
            String propertyId, T... enumsToExcludes) {
        Class<T> enumeration = binder.getItemDataSource().getItemProperty(propertyId).getType();
        if (enumeration.isEnum() == false) {
            throw new AmapjRuntimeException("Le champ " + title + " n'est pas de type enum");
        }

        HelpInfo metaData = MetaDataEnum.getHelpInfo(enumeration);

        ComboBox comboBox = new ComboBox();
        comboBox.setWidth("300px");

        EnumSet<T> enums = EnumSet.allOf(enumeration);
        for (T en : enums) {
            if (isAllowed(en, enumsToExcludes)) {
                String caption = getCaption(metaData, en);

                comboBox.addItem(en);
                comboBox.setItemCaption(en, caption);
            }
        }

        binder.bind(comboBox, propertyId);

        comboBox.setImmediate(true);

        HorizontalLayout hl = new HorizontalLayout();
        hl.setCaption(title);
        hl.addComponent(comboBox);

        if (metaData != null) {

            Button aide = new Button();
            aide.setIcon(FontAwesome.QUESTION_CIRCLE);
            aide.addStyleName("borderless-colored");
            aide.addStyleName("question-mark");
            aide.addClickListener(e -> handleAide(metaData));

            hl.addComponent(aide);
        }

        return hl;
    }

    private static void handleAide(HelpInfo metaData) {
        String fullText = metaData.getFullText();
        MessagePopup m = new MessagePopup("Aide", ContentMode.HTML, ColorStyle.GREEN, fullText);
        MessagePopup.open(m);
    }

    static private <T extends Enum<T>> String getCaption(HelpInfo metaData, T en) {
        if (metaData == null) {
            return en.toString();
        } else {
            return metaData.getLib(en);
        }
    }

    private static <T extends Enum<T>> boolean isAllowed(T en, T[] enumsToExcludes) {
        if (enumsToExcludes == null) {
            return true;
        }
        for (int i = 0; i < enumsToExcludes.length; i++) {
            T enum1 = enumsToExcludes[i];
            if (enum1.equals(en)) {
                return false;
            }
        }
        return true;
    }

    /**
     * Permet de crer une combo box permettant de choisir parmi une liste de Enum
     * pour etre utilis dans les tableaux
     *  
     * @param binder
     * @param title
     * @param enumeration donne  la fois la liste  afficher et la valeur par dfaut 
     * @param propertyId
     * @return
     */
    static public <T extends Enum<T>> ComboBox createEnumSearcher(String title, T enumeration) {
        ComboBox comboBox = new ComboBox(title);

        EnumSet<T> enums = EnumSet.allOf(enumeration.getDeclaringClass());
        for (T en : enums) {
            String caption = en.toString();
            comboBox.addItem(en);
            comboBox.setItemCaption(en, caption);
        }

        comboBox.setValue(enumeration);

        return comboBox;
    }

}