cimav.client.view.catalogos.empleados.EmpleadosUI.java Source code

Java tutorial

Introduction

Here is the source code for cimav.client.view.catalogos.empleados.EmpleadosUI.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package cimav.client.view.catalogos.empleados;

import cimav.client.view.common.EMethod;
import cimav.client.view.common.ETypeResult;
import cimav.client.view.common.MethodEvent;
import cimav.client.data.domain.EmpleadoBase;
import cimav.client.view.common.EmpleadoListCell;
import cimav.client.view.provider.EmpleadosBaseProvider;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Style;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.event.dom.client.KeyUpHandler;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.cellview.client.CellList;
import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SingleSelectionModel;
import java.util.List;
import org.gwtbootstrap3.client.ui.Button;
import org.gwtbootstrap3.client.ui.TextBox;
import org.gwtbootstrap3.client.ui.constants.IconFlip;
import org.gwtbootstrap3.extras.growl.client.ui.Growl;

/**
 *
 * @author juan.calderon
 */
public class EmpleadosUI extends Composite {

    private static final EmpleadosUIUiBinder uiBinder = GWT.create(EmpleadosUIUiBinder.class);

    interface EmpleadosUIUiBinder extends UiBinder<Widget, EmpleadosUI> {
    }

    @UiField
    public ScrollPanel scrollPanel;
    CellList<EmpleadoBase> cellList;

    @UiField
    TextBox searchTxt;
    @UiField
    Button reloadBtn;
    @UiField
    Button addBtn;

    @UiField
    EmpleadosEditorUI empleadosEditorUI;

    private static EmpleadosBaseProvider empleadosBaseProvider;

    private final SingleSelectionModel<EmpleadoBase> selectionModel;

    public EmpleadosUI() {
        initWidget(uiBinder.createAndBindUi(this));

        empleadosBaseProvider = new EmpleadosBaseProvider();

        //CellList.Resources cellListResources = GWT.create(CellList.Resources.class);
        CellList.Resources cellListResources = GWT.create(ICellListResources.class);
        selectionModel = new SingleSelectionModel<>();
        EmpleadoListCell empleadoListCell = new EmpleadoListCell(selectionModel);
        cellList = new CellList<EmpleadoBase>(empleadoListCell, cellListResources,
                empleadosBaseProvider.getDataProvider());
        cellList.setKeyboardSelectionPolicy(HasKeyboardSelectionPolicy.KeyboardSelectionPolicy.ENABLED);
        cellList.setSelectionModel(selectionModel);
        selectionModel.addSelectionChangeHandler(new SelectionHandler());
        cellList.setPageSize(800); // mximo son 400 empleados. Al mostrarlos todos, no se requiere Pager.
        scrollPanel.add(cellList);

        //                SimplePager.Resources pagerResources = GWT.create(SimplePager.Resources.class);
        //        pager = new SimplePager(SimplePager.TextLocation.CENTER, pagerResources, false, 0, true);
        //        pager.setDisplay(dataGrid);
        /* Inyectarle style absolute al Abuelo para que funcione el scroll del cellList */
        Element divAbue = cellList.getElement().getParentElement().getParentElement();
        divAbue.getStyle().setPosition(Style.Position.ABSOLUTE);
        divAbue.getStyle().setTop(0, Style.Unit.PX);
        divAbue.getStyle().setLeft(0, Style.Unit.PX);
        divAbue.getStyle().setBottom(0, Style.Unit.PX);
        divAbue.getStyle().setRight(0, Style.Unit.PX);

        // Add the CellList to the adapter in the database.
        empleadosBaseProvider.addDataDisplay(cellList);

        // Escucha los metodos y las acciones (find_all, update, create, save, reloadById, etc.)
        empleadosBaseProvider.addMethodExecutedListener(new ProviderMethodExecutedListener());

        reloadBtn.setIconFlip(IconFlip.HORIZONTAL);
        reloadBtn.addClickHandler(new ReloadClickHandler());

        addBtn.addClickHandler(new AddClickHandler());

        searchTxt.addKeyUpHandler(new SearchKeyUpHandler());

        empleadosEditorUI.addActionEditorListener(new EditorActionListener());

        // orden inicial
        orderBy = EmpleadosBaseProvider.ORDER_BY_NAME;
        // filtro inicial
        empleadosBaseProvider.getDataProvider().setFilter("");

        /* Al arrancar, cargar a todos los empleados */
        reloadAll();
    }

    private class EditorActionListener implements EmpleadosEditorUI.ActionEditorListener {
        @Override
        public void onActionEditor(MethodEvent restEvent) {
            if (EMethod.CREATE.equals(restEvent.getMethod())) {
                if (ETypeResult.SUCCESS.equals(restEvent.getTypeResult())) {
                    EmpleadoBase created = (EmpleadoBase) restEvent.getResult();

                    // requiere usar la bases de intermediario; de lo contrario no recarga bien la lista
                    // requiere usar la bases de intermediario; de lo contrario no recarga bien la lista
                    List<EmpleadoBase> bases = empleadosBaseProvider.getDataProvider().getList();
                    bases.add(created);
                    empleadosBaseProvider.getDataProvider().setList(bases);

                    //selectionModel.setSelected(created, true);
                }
            } else if (EMethod.UPDATE.equals(restEvent.getMethod())) {
                if (ETypeResult.SUCCESS.equals(restEvent.getTypeResult())) {
                    EmpleadoBase reloaded = (EmpleadoBase) restEvent.getResult();
                    EmpleadoBase selected = selectionModel.getSelectedObject();
                    selected.setName(reloaded.getName());
                    selected.setCode(reloaded.getCode());
                    selected.setDepartamento(reloaded.getDepartamento());
                    selected.setGrupo(reloaded.getGrupo());
                    selected.setSede(reloaded.getSede());
                    selected.setNivel(reloaded.getNivel());
                    selected.setEstimulosProductividad(reloaded.getEstimulosProductividad());
                    /*                    selected.setFechaAntiguedad(reloaded.getFechaAntiguedad());
                                        selected.setPantDayEven(reloaded.getPantDayEven());
                                        selected.setPantDayOdd(reloaded.getPantDayOdd());
                                        selected.setPantMonths(reloaded.getPantMonths());
                                        selected.setPantYears(reloaded.getPantYears()); */

                    // requiere usar la bases de intermediario; de lo contrario no recarga bien la lista
                    List<EmpleadoBase> bases = empleadosBaseProvider.getDataProvider().getList();
                    int idx = bases.indexOf(selected);
                    bases.set(idx, selected);
                    empleadosBaseProvider.getDataProvider().setList(bases);
                }
            } else if (EMethod.CANCEL.equals(restEvent.getMethod())) {
                // re-envia el base seleccionado al editor
                EmpleadoBase empBaseSelected = selectionModel.getSelectedObject();
                empleadosEditorUI.setSelectedBean(empBaseSelected.getId());
            }
        }
    }

    private class ReloadClickHandler implements ClickHandler {
        @Override
        public void onClick(ClickEvent event) {
            reloadAll();
        }
    }

    private class AddClickHandler implements ClickHandler {
        @Override
        public void onClick(ClickEvent event) {
            // Deseleccionar
            deseleccionar();

            // enviar empleado nuevo al Bean del Editor
            empleadosEditorUI.addNewEmpleado();
        }
    }

    private class SearchKeyUpHandler implements KeyUpHandler {
        @Override
        public void onKeyUp(KeyUpEvent event) {
            EmpleadosUI.this.filtrar();
        }
    }

    private void deseleccionar() {
        EmpleadoBase empSel = selectionModel.getSelectedObject();
        if (empSel != null) {
            // deseleccionar sin lanzar el listener
            selectionModel.setSelected(empSel, false);
        }
    }

    private void filtrar() {
        final String txtToSearch = searchTxt.getText();
        empleadosBaseProvider.getDataProvider().setFilter(txtToSearch);

        String rows = empleadosBaseProvider.getRowCountPropotional();
        reloadBtn.setText(rows);

        EmpleadoBase empSel = selectionModel.getSelectedObject();
        if (empSel != null) {
            if (empleadosBaseProvider.containsItem(empSel)) {
                // si aparece en la lista filtrada, mostrarlo
                scrollIntoView(empSel);
            } else {
                // si en la lista filtrada no aparece el seleccionado, deseleccionar
                deseleccionar();
                empleadosEditorUI.setSelectedBean(null);
            }
        }

    }

    private int orderBy;

    @UiHandler({ "btnByName", "btnByCode", "btnByGrupo", "btnByNivel" })
    void handleClick(ClickEvent e) {
        orderBy = -1;
        if (e.getSource().toString().contains("Nombre")) {
            orderBy = EmpleadosBaseProvider.ORDER_BY_NAME;
        } else if (e.getSource().toString().contains("Num")) {
            orderBy = EmpleadosBaseProvider.ORDER_BY_CODE;
        } else if (e.getSource().toString().contains("Grp")) {
            orderBy = EmpleadosBaseProvider.ORDER_BY_GRUPO;
        } else if (e.getSource().toString().contains("Niv")) {
            orderBy = EmpleadosBaseProvider.ORDER_BY_NIVEL;

            //selectionModel.setSelected(new Empleado(), true);
        }
        this.orderBy();
    }

    private void orderBy() {
        empleadosBaseProvider.order(this.orderBy);

        EmpleadoBase empleadoSelected = (EmpleadoBase) selectionModel.getSelectedObject();
        scrollIntoView(empleadoSelected);
    }

    private void reloadAll() {
        // ReCargar todos los empleados
        empleadosBaseProvider.findAllBase();
    }

    private class ProviderMethodExecutedListener implements EmpleadosBaseProvider.MethodExecutedListener {

        @Override
        public void onMethodExecuted(MethodEvent event) {
            if (EMethod.FIND_BASE_ALL.equals(event.getMethod())) {
                EmpleadosUI.this.orderBy();

                //EmpleadosUI.this.selectionModel.setSelected(null, true);
                deseleccionar();
                empleadosEditorUI.setSelectedBean(null);
                searchTxt.setFocus(true);

                EmpleadosUI.this.filtrar();

                if (ETypeResult.SUCCESS.equals(event.getTypeResult())) {
                    Growl.growl("Carga de registros realizada");
                } else {
                    Window.alert("Fall carga de registros");
                }
            } /*else if (EMethod.CREATE.equals(event.getMethod())) {
              if (ETypeResult.SUCCESS.equals(event.getTypeResult())) {
                  Growl.growl("Registro nuevo agregado");
                  EmpleadoBase empCreado = (EmpleadoBase) event.getResult();
                  selectionModel.setSelected(empCreado, true);
              } else {
                  //setSelectedBean(null);
                  String msgError = "Fall creacin de registro nuevo \n" + event.getReason();
                  Window.alert(msgError);
              }
              } */
        }
    }

    private int scrollIntoView(EmpleadoBase empleadoToView) {
        int idx = -2;
        if (cellList.getVisibleItemCount() > 0 && empleadoToView != null) {
            idx = cellList.getVisibleItems().indexOf(empleadoToView);
            if (idx >= 0) {
                cellList.getRowElement(idx).scrollIntoView();
            }
        }
        return idx;
    }

    private class SelectionHandler implements SelectionChangeEvent.Handler {

        @Override
        public void onSelectionChange(SelectionChangeEvent event) {
            if (event.getSource() instanceof SingleSelectionModel) {

                EmpleadoBase empleadoSelected = null;
                try {
                    SingleSelectionModel selModel = (SingleSelectionModel) event.getSource();
                    empleadoSelected = (EmpleadoBase) selModel.getSelectedObject();

                    if (empleadoSelected == null) {
                        return;
                    }

                    int idx = scrollIntoView(empleadoSelected);

                    // GWT.log(idx + " >>> Sel: " + empleadoSelected);

                    ////Empleado sel = (Empleado) empleadoSelected;

                    empleadosEditorUI.setSelectedBean(empleadoSelected.getId());

                } catch (Exception e) {
                    Window.alert("onSelectionChange >> " + empleadoSelected + " >> " + e.getMessage());
                }
            }
        }
    }

    //  private EmpleadoREST empleadoREST;

}