org.cimav.client.ui.departamentos.DepartamentosUI.java Source code

Java tutorial

Introduction

Here is the source code for org.cimav.client.ui.departamentos.DepartamentosUI.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 org.cimav.client.ui.departamentos;

import com.github.gwtbootstrap.client.ui.Button;
import com.google.gwt.cell.client.TextCell;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.DoubleClickEvent;
import com.google.gwt.event.dom.client.DoubleClickHandler;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler;
import com.google.gwt.user.cellview.client.DataGrid;
import com.google.gwt.user.cellview.client.SimplePager;
import com.google.gwt.user.cellview.client.SimplePager.TextLocation;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TabLayoutPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SelectionModel;
import com.google.gwt.view.client.SingleSelectionModel;
import java.util.Comparator;
import org.cimav.client.db.domain.Departamento;
import org.cimav.client.db.domain.DeptoDatabase;
import org.cimav.client.tools.InfoView;

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

    private static DepartamentosUIUiBinder uiBinder = GWT.create(DepartamentosUIUiBinder.class);

    interface DepartamentosUIUiBinder extends UiBinder<Widget, DepartamentosUI> {
    }

    @UiField
    TabLayoutPanel tabLayout;
    @UiField
    DepartamentoEditorUI departamentoEditorUI;

    /**
     * The main DataGrid.
     */
    @UiField(provided = true)
    DataGrid<Departamento> dataGrid;

    /**
     * The pager used to change the range of data.
     */
    @UiField(provided = true)
    SimplePager pager;

    @UiField
    Button btnReload;
    @UiField
    Button btnAdd;
    @UiField
    Button btnEditar;
    @UiField
    Button btnEliminar;
    @UiField
    Button btnExtra;

    //private Departamento currentDepto;
    public DepartamentosUI() {

        buildGrid();

        initWidget(uiBinder.createAndBindUi(this));

        // 1era carga de Datos
        DeptoDatabase.get().load();
        // de inicio, poner en Nulo
        this.clearSelection();
        this.updateWidgets();

        tabLayout.addSelectionHandler(new SelectionHandler<Integer>() {
            @Override
            public void onSelection(SelectionEvent<Integer> event) {
                if (event.getSelectedItem() == 0) {
                    // Tab del Grid

                    // DataGrid es un Widget tipo RequireSize; por lo tanto debe ser hijo de un widget tipo ProvidesResize. 
                    // De lo contrario se "desaparece" al no poder ajustar a los cambios de tamao.
                    dataGrid.setWidth("100%");
                    dataGrid.setHeight("100%");
                    dataGrid.redraw();

                } else if (event.getSelectedItem() == 1) {
                    // Tab del Editor
                }
            }
        });

        btnReload.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                clearSelection();
                DeptoDatabase.get().load();
            }
        });
        btnAdd.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {

                // el nuevo debe ser id < 0 y garantizar que si el anterior tambien es nuevo, lo sustituya
                int idNegativo = DeptoDatabase.currentDepto != null && DeptoDatabase.currentDepto.getId() != null
                        && DeptoDatabase.currentDepto.getId() <= 0 ? DeptoDatabase.currentDepto.getId() - 1 : -1;

                // crear nuevo Departamento
                Departamento nuevoDepto = new Departamento();
                // con -1 para indicar que es nuevo
                nuevoDepto.setId(idNegativo);
                nuevoDepto.setCodigo("");
                DeptoDatabase.currentDepto = nuevoDepto;

                // en vez del clearSelection
                dataGrid.getSelectionModel().setSelected(DeptoDatabase.currentDepto, true);
                // dispara el OnSelect (si cambia dado que )
                //clearSelection();

                tabLayout.selectTab(1);
            }
        });
        btnEditar.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                // simple selecciona el tab del Editor
                tabLayout.selectTab(1);
            }
        });
        btnEliminar.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {

                // TODO Falta msg de autorizacin de remove
                // keep el depto a remove
                Departamento deptoToRemove = DeptoDatabase.currentDepto;
                // limpia la seleccin
                clearSelection();
                updateWidgets();
                // elimina el depto a remove
                DeptoDatabase.get().removeDepto(deptoToRemove);

                InfoView.show("Registro " + deptoToRemove.getCodigo() + " eliminado");
            }
        });

        btnExtra.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {

                DeptoDatabase.get().extra();

            }
        });

    }

    private void buildGrid() {
        // super.onLoad(); //To change body of generated methods, choose Tools | Templates.

        /*
         * Set a key provider that provides a unique key for each contact. If key is
         * used to identify contacts when fields (such as the name and address)
         * change.
         */
        dataGrid = new DataGrid<>(Departamento.KEY_PROVIDER);
        dataGrid.setWidth("100%");
        dataGrid.setHeight("100%");

        /*
         * Do not refresh the headers every time the data is updated. The footer
         * depends on the current data, so we do not disable auto refresh on the
         * footer.
         */
        dataGrid.setAutoHeaderRefreshDisabled(true);

        // Set the message to display when the table is empty.
        dataGrid.setEmptyTableWidget(new Label("No hay departamentos"));

        // Attach a column sort handler to the ListDataProvider to sort the list.
        ListHandler<Departamento> sortHandler = new ListHandler<>(DeptoDatabase.get().getDataProvider().getList());
        dataGrid.addColumnSortHandler(sortHandler);

        // Create a Pager to control the table.
        SimplePager.Resources pagerResources = GWT.create(SimplePager.Resources.class);
        pager = new SimplePager(TextLocation.CENTER, pagerResources, false, 0, true);
        pager.setDisplay(dataGrid);

        dataGrid.setPageSize(30);

        // Add a selection model so we can select cells.
        final SelectionModel<Departamento> selectionModel = new SingleSelectionModel<>(Departamento.KEY_PROVIDER);
        selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
            @Override
            public void onSelectionChange(SelectionChangeEvent event) {
                //System.out.println("123> " + event.getSource() + " - " + event.getAssociatedType());
                if (event.getSource() instanceof SingleSelectionModel) {

                    SingleSelectionModel selecter = (SingleSelectionModel) event.getSource();
                    Departamento sel = (Departamento) selecter.getSelectedObject();

                    // Seleccion actual
                    DeptoDatabase.currentDepto = sel;

                    System.out.println("Depto.Id --> " + DeptoDatabase.currentDepto);

                    departamentoEditorUI.setDepartamento(DeptoDatabase.currentDepto);

                    // Actualizar botones
                    updateWidgets();
                }
            }
        });
        dataGrid.setSelectionModel(selectionModel);

        dataGrid.addDomHandler(new DoubleClickHandler() {
            @SuppressWarnings("unchecked")
            @Override
            public void onDoubleClick(DoubleClickEvent event) {
                //                DataGrid<Departamento> grid = (DataGrid<Departamento>) event.getSource();
                //                int row = grid.getKeyboardSelectedRow();
                //                Departamento item = grid.getVisibleItem(row);

                // simple selecciona el tab del Editor
                tabLayout.selectTab(1);
            }
        }, DoubleClickEvent.getType());

        initTableColumns(sortHandler);

        // Add the CellList to the adapter in the database.
        DeptoDatabase.get().addDataDisplay(dataGrid);

    }

    /**
     * Add the columns to the table.
     */
    private void initTableColumns(ListHandler<Departamento> sortHandler) {

        // ID
        Column<Departamento, String> idCol = new Column<Departamento, String>(new TextCell()) {
            @Override
            public String getValue(Departamento object) {
                return object.getId().toString();
            }
        };
        dataGrid.addColumn(idCol, "ID");
        dataGrid.setColumnWidth(idCol, 40, Unit.PX);

        // Clave
        Column<Departamento, String> codigoCol = new Column<Departamento, String>((new TextCell())) {
            @Override
            public String getValue(Departamento object) {
                return object.getCodigo();
            }
        };
        codigoCol.setSortable(true);
        sortHandler.setComparator(codigoCol, new Comparator<Departamento>() {
            @Override
            public int compare(Departamento o1, Departamento o2) {
                return o1.getCodigo().compareTo(o2.getCodigo());
            }
        });
        dataGrid.addColumn(codigoCol, "Cdigo");
        dataGrid.setColumnWidth(codigoCol, 70, Unit.PX);

        // Nombre
        Column<Departamento, String> nombreCol = new Column<Departamento, String>(new TextCell()) {
            @Override
            public String getValue(Departamento object) {
                return object.getNombre();
            }
        };
        nombreCol.setSortable(true);
        sortHandler.setComparator(nombreCol, new Comparator<Departamento>() {
            @Override
            public int compare(Departamento o1, Departamento o2) {
                return o1.getNombre().compareTo(o2.getNombre());
            }
        });
        dataGrid.addColumn(nombreCol, "Nombre");
        dataGrid.setColumnWidth(nombreCol, 60, Unit.PCT);

    }

    private void clearSelection() {
        if (DeptoDatabase.currentDepto != null
                && dataGrid.getSelectionModel().isSelected(DeptoDatabase.currentDepto)) {
            dataGrid.getSelectionModel().setSelected(DeptoDatabase.currentDepto, false);
        }
        DeptoDatabase.currentDepto = null;
    }

    private void updateWidgets() {
        boolean isNotNull = DeptoDatabase.currentDepto != null;
        btnEditar.setEnabled(isNotNull);
        btnEliminar.setEnabled(isNotNull);
    }
}