Java tutorial
/* * 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); } }