fr.amapj.view.engine.tools.BaseUiTools.java Source code

Java tutorial

Introduction

Here is the source code for fr.amapj.view.engine.tools.BaseUiTools.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.tools;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;

import com.vaadin.data.fieldgroup.FieldGroup;
import com.vaadin.data.util.converter.Converter;
import com.vaadin.server.Page;
import com.vaadin.shared.ui.datefield.Resolution;
import com.vaadin.shared.ui.label.ContentMode;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.Label;
import com.vaadin.ui.Layout;
import com.vaadin.ui.Panel;
import com.vaadin.ui.PopupDateField;
import com.vaadin.ui.Table;
import com.vaadin.ui.Table.ColumnHeaderMode;
import com.vaadin.ui.TextField;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;

import fr.amapj.common.DateUtils;
import fr.amapj.view.engine.popup.messagepopup.MessagePopup;
import fr.amapj.view.engine.widgets.CurrencyTextFieldConverter;
import fr.amapj.view.engine.widgets.IntegerTextFieldConverter;
import fr.amapj.view.engine.widgets.QteTextFieldConverter;

public class BaseUiTools {

    static public Label addStdLabel(Layout layout, String content, String styleName) {
        Label tf = new Label(content);
        tf.addStyleName(styleName);
        layout.addComponent(tf);
        return tf;
    }

    static public Label addHtmlLabel(Layout layout, String content, String styleName) {
        Label tf = new Label(content, ContentMode.HTML);
        tf.addStyleName(styleName);
        layout.addComponent(tf);
        return tf;
    }

    /**
     * Cre un Panel avec un VerticalLayout  l'intrieur 
     * 
     * @param layout
     * @param styleName
     * @return
     */
    static public VerticalLayout addPanel(Layout layout, String styleName) {
        Panel p0 = new Panel();
        p0.setWidth("100%");
        p0.addStyleName(styleName);

        VerticalLayout vl1 = new VerticalLayout();
        vl1.setMargin(true);
        p0.setContent(vl1);
        layout.addComponent(p0);

        return vl1;
    }

    /**
     * Permet de crer un bandeau, c'est  dire avec un texte avec un fond, et ceci sur toute la longueur 
     * 
     */
    static public Label addBandeau(Layout layout, String content, String styleName) {
        Label l = new Label(content);
        l.setWidth("100%");

        Panel p1 = new Panel();
        p1.setContent(l);
        p1.addStyleName("bandeau-" + styleName);

        layout.addComponent(p1);

        return l;
    }

    static public Label addEmptyLine(Layout layout) {
        Label l = new Label("<br/>", ContentMode.HTML);
        layout.addComponent(l);
        return l;
    }

    /**
     * On distingue deux modes d'affichage dans le logiciel : un mode compact pour les smartphone,
     * et un mode classique dans les autres cas
     */
    static public boolean isCompactMode() {
        Page page = UI.getCurrent().getPage();
        int width = page.getBrowserWindowWidth();
        int height = page.getBrowserWindowHeight();

        if ((height < 700) || (width < 700)) {
            return true;
        }
        return false;
    }

    /**
     * 
     * @param width en pixel 
     * @return
     */
    public static boolean isWidthBelow(int width) {
        Page page = UI.getCurrent().getPage();
        int currentWidth = page.getBrowserWindowWidth();
        return currentWidth < width;
    }

    /**
     * Calcule la taille en pixel du popup, en prenant en compte le ratio du popup 
     */
    public static int computePopupWidth(int widthRatio) {
        Page page = UI.getCurrent().getPage();
        int currentWidth = page.getBrowserWindowWidth();
        return (currentWidth * widthRatio) / 100;
    }

    static public PopupDateField createDateField(FieldGroup binder, String propertyId, String title) {
        PopupDateField sample = createPopupDateField(title);
        binder.bind(sample, propertyId);
        return sample;
    }

    static public PopupDateField createDateField(String title) {
        PopupDateField sample = createPopupDateField(title);
        return sample;
    }

    private static PopupDateField createPopupDateField(String title) {
        PopupDateField sample = new PopupDateField(title) {
            protected Date handleUnparsableDateString(String dateString) throws Converter.ConversionException {
                List<String> strs = new ArrayList<>();
                strs.add("Nous ne comprenons pas la date \"" + dateString + "\"");
                strs.add("Merci de cliquer sur l'icone de calendrier \"14\" sur la droite pour choisir la date");
                strs.add("ou de saisir la date au format 02/10/15 pour le 2 octobre 2015");
                MessagePopup.open(new MessagePopup("Erreur sur la date", strs));
                return null;
            }
        };

        sample.setValue(DateUtils.getDate());
        sample.setImmediate(true);
        sample.setLocale(Locale.FRANCE);
        sample.setResolution(Resolution.DAY);

        return sample;
    }

    /**
     * Permet la saisie d'une quantit, c'est  dire un nombre entier compris entre 0 et l'infini
     * 
     */
    static public TextField createQteField(String title) {
        TextField tf = new TextField(title);
        tf.setConverter(new QteTextFieldConverter());
        tf.setNullRepresentation("");
        tf.setImmediate(true);
        return tf;
    }

    /**
     * Permet la saisie d'un Integer, c'est  dire un nombre entier compris entre moins l'infi et plus l'infini
     * 
     */
    static public TextField createIntegerField(String title) {
        TextField tf = new TextField(title);
        tf.setConverter(new IntegerTextFieldConverter());
        tf.setNullRepresentation("");
        tf.setImmediate(true);
        return tf;
    }

    /**
     * Permet la saisie d'un prix, c'est  dire un nombre allant de 0.00  999999999.99 avec deux chiffres aprs la virgule
     * 
     */

    static public TextField createCurrencyField(String title, boolean allowNegativeNumber) {
        TextField tf = new TextField(title);
        tf.setConverter(new CurrencyTextFieldConverter(allowNegativeNumber));
        tf.setNullRepresentation("");
        tf.setImmediate(true);
        return tf;
    }

    /**
     * Permet la saisied'une check box
     * 
     */

    static public CheckBox createCheckBoxField(String title) {
        CheckBox checkbox = new CheckBox();
        checkbox.addStyleName("align-center");
        checkbox.setImmediate(true);

        return checkbox;
    }

    /**
     * Permet de crer une table sans titre
     * 
     * @param nbCol
     * @return
     */
    static public Table createStaticTable(int nbCol) {
        Table t = new Table();
        t.setStyleName("big");
        t.setColumnHeaderMode(ColumnHeaderMode.HIDDEN);

        for (int i = 0; i < nbCol; i++) {
            t.addContainerProperty("", String.class, null);
        }

        return t;
    }

    static public Table addLine(Table t, String... line) {
        t.addItem(line, null);
        return t;
    }

}