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

Java tutorial

Introduction

Here is the source code for cimav.client.view.catalogos.empleados.EmpleadosEditorUI.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.EBanco;
import cimav.client.data.domain.EClinica;
import cimav.client.data.domain.EEdoCivil;
import cimav.client.data.domain.EGrupo;
import cimav.client.data.domain.ESede;
import cimav.client.data.domain.ESexo;
import cimav.client.data.domain.EStatusEmpleado;
import cimav.client.data.domain.Empleado;
import cimav.client.data.rest.BaseREST;
import cimav.client.data.rest.EmpleadoREST;
import cimav.client.view.common.FechaDateBox;
import cimav.client.view.catalogos.departamentos.DeptoChosen;
import cimav.client.view.catalogos.empleados.jefe.JefeChosen;
import cimav.client.view.catalogos.empleados.pension.PensionUI;
import cimav.client.view.catalogos.empleados.sni.TipoSNIChosen;
import cimav.client.view.catalogos.empleados.tipoantiguedad.TipoAntiguedadChosen;
import cimav.client.view.catalogos.empleados.tipocontrato.TipoContratoChosen;
import cimav.client.view.catalogos.empleados.tipoempleado.TipoEmpleadoChosen;
import cimav.client.view.catalogos.tabulador.TabuladorChosen;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.text.shared.Renderer;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Widget;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import org.gwtbootstrap3.client.ui.Button;
import org.gwtbootstrap3.client.ui.Label;
import org.gwtbootstrap3.client.ui.TabListItem;
import org.gwtbootstrap3.client.ui.TextBox;
import org.gwtbootstrap3.client.ui.ValueListBox;
import org.gwtbootstrap3.extras.growl.client.ui.Growl;
import org.jboss.errai.databinding.client.api.DataBinder;
import org.jboss.errai.databinding.client.api.handler.property.PropertyChangeEvent;
import org.jboss.errai.databinding.client.api.handler.property.PropertyChangeHandler;

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

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

    interface EmpleadosEditorUIUiBinder extends UiBinder<Widget, EmpleadosEditorUI> {
    }

    @UiField
    HTMLPanel panelEditorGlass;

    @UiField
    TabListItem tabEditorGeneral;

    @UiField
    FlexTable flexEditorGeneral;
    @UiField
    FlexTable flexEditorLaboral;
    @UiField
    FlexTable flexEditorPersonal;

    @UiField
    Button saveBtn;
    @UiField
    Button cancelBtn;

    @UiField
    com.google.gwt.user.client.ui.Label txtStatus;

    // general
    private final TextBox nombreTxtBox;
    private final TextBox paternoTxtBox;
    private final TextBox maternoTxtBox;
    private final TextBox rfcTxtBox;
    private final TextBox curpTxtBox;
    private final TextBox imssTxtBox;
    private final ValueListBox<EClinica> imssClinicaChosen;
    private final ValueListBox<EBanco> bancoChosen;
    private final TextBox cuentaBancoTxtBox;
    private final TextBox cuentaCimavTxtBox;
    // laboral
    private final ValueListBox<ESede> sedeChosen;
    private final DeptoChosen deptoChosen;
    private final FechaDateBox fechaIngresoDatePicker = new FechaDateBox();
    private final FechaDateBox fechaContratoFinDatePicker = new FechaDateBox();
    private final FechaDateBox fechaContratoInicioDatePicker = new FechaDateBox();
    private final FechaDateBox fechaBajaDatePicker = new FechaDateBox();
    private final FechaDateBox fechaAntiguedadDatePicker = new FechaDateBox();
    private final FechaDateBox fechaSNIDatePicker = new FechaDateBox();
    private final ValueListBox<EStatusEmpleado> statusEmpladoChose;
    private final JefeChosen jefeChosen;
    private final ValueListBox<EGrupo> grupoChosen;
    private final TabuladorChosen tabuladorChosen;
    private final TipoEmpleadoChosen tipoEmpleadoChosen;
    private final TipoContratoChosen tipoContratoChosen;
    private final TipoAntiguedadChosen tipoAntiguedadChosen;
    private final TipoSNIChosen tipoSniChosen;
    private final TextBox numSNITxtBox;
    private final TextBox numEstimulosProductividadTxtBox;
    private final TextBox porcenSegSepacionIndTxtBox;
    //private final ValueListBox<ETipoPension> pensionTipo;
    //private final Button seleccionarConceptos;
    //private final Div divTipo;
    private final PensionUI pensionUI;
    private final TextBox pensionPorcentaje;
    private final TextBox pensionBeneficiario;
    private final ValueListBox<EBanco> pensionBanco;
    private final TextBox pensionCuenta;
    // personal
    private final ValueListBox<ESexo> sexoChose;
    private final ValueListBox<EEdoCivil> edoCivilChose;
    private final FechaDateBox fechaNacimientoDatePicker = new FechaDateBox();
    private final TextBox direccionCalle;
    private final TextBox direccionColonia;
    private final TextBox direccionCP;
    private final TextBox telefono;
    private final TextBox emailPersonal;

    // Model & DataBinder
    private Empleado empleadoSelected;
    private DataBinder<Empleado> empleadoBinder;

    private EmpleadoREST empleadoREST;

    public EmpleadosEditorUI() {

        initWidget(uiBinder.createAndBindUi(this));

        FlexTable.FlexCellFormatter cellFormatterGeneral = flexEditorGeneral.getFlexCellFormatter();

        flexEditorGeneral.setCellSpacing(0);
        flexEditorGeneral.setCellPadding(0);
        //        flexEditorGeneral.getColumnFormatter().setWidth(0, "50px;");

        nombreTxtBox = new TextBox();
        nombreTxtBox.setWidth("244px");
        paternoTxtBox = new TextBox();
        paternoTxtBox.setWidth("244px");
        maternoTxtBox = new TextBox();
        maternoTxtBox.setWidth("244px");

        rfcTxtBox = new TextBox();
        rfcTxtBox.setWidth("244px");
        curpTxtBox = new TextBox();
        curpTxtBox.setWidth("244px");

        imssTxtBox = new TextBox();
        imssTxtBox.setWidth("244px");

        imssClinicaChosen = new ValueListBox<>(new Renderer<EClinica>() {
            @Override
            public String render(EClinica object) {
                if (object == null) {
                    return "Nada";
                }
                return object.getName();
            }

            @Override
            public void render(EClinica object, Appendable appendable) throws IOException {
                String s = render(object);
                appendable.append(s);
            }
        });
        List<EClinica> clinicas = Arrays.asList(EClinica.values());
        imssClinicaChosen.setValue(EClinica.CLINICA_044); //default
        imssClinicaChosen.setAcceptableValues(clinicas);
        imssClinicaChosen.setWidth("244px");

        bancoChosen = new ValueListBox<>(new Renderer<EBanco>() {
            @Override
            public String render(EBanco object) {
                if (object == null) {
                    return "None";
                }
                return object.getNombre();
            }

            @Override
            public void render(EBanco object, Appendable appendable) throws IOException {
                String s = render(object);
                appendable.append(s);
            }
        });
        List<EBanco> bancos = Arrays.asList(EBanco.values());
        bancoChosen.setValue(EBanco.BANORTE); //default
        bancoChosen.setAcceptableValues(bancos);
        bancoChosen.setWidth("244px");
        cuentaBancoTxtBox = new TextBox();
        cuentaBancoTxtBox.setWidth("244px");

        cuentaCimavTxtBox = new TextBox();
        cuentaCimavTxtBox.setWidth("244px");

        deptoChosen = new DeptoChosen();
        deptoChosen.setWidth("244px");

        String htmlColSpc = "<span style='margin-right: 10px;'></span>";
        String htmlRowSpc = "<span style='margin-bottom: 10px; display: block;'></span>";

        // Add some standard form options
        // r, c, obj
        flexEditorGeneral.setWidget(0, 0, new HTML("<strong>Nombre(s)</strong>"));
        flexEditorGeneral.setWidget(0, 1, new HTML(htmlColSpc));
        flexEditorGeneral.setWidget(1, 0, nombreTxtBox);
        flexEditorGeneral.setHTML(0, 2, "A. Paterno");
        flexEditorGeneral.setWidget(0, 3, new HTML(htmlColSpc));
        flexEditorGeneral.setWidget(1, 2, paternoTxtBox);
        flexEditorGeneral.setHTML(0, 4, "A. Materno");
        flexEditorGeneral.setWidget(1, 4, maternoTxtBox);

        flexEditorGeneral.setWidget(2, 0, new HTML(htmlRowSpc));
        flexEditorGeneral.setHTML(3, 0, "RFC");
        flexEditorGeneral.setWidget(4, 0, rfcTxtBox);
        flexEditorGeneral.setHTML(3, 2, "CURP");
        flexEditorGeneral.setWidget(4, 2, curpTxtBox);

        flexEditorGeneral.setWidget(5, 0, new HTML(htmlRowSpc));
        flexEditorGeneral.setHTML(6, 0, "IMSS");
        flexEditorGeneral.setWidget(7, 0, imssTxtBox);
        flexEditorGeneral.setHTML(6, 2, "Clinica");
        flexEditorGeneral.setWidget(7, 2, imssClinicaChosen);

        flexEditorGeneral.setWidget(11, 0, new HTML(htmlRowSpc));
        flexEditorGeneral.setHTML(12, 0, "Banco");
        flexEditorGeneral.setWidget(13, 0, bancoChosen);
        flexEditorGeneral.setHTML(12, 2, "Cuenta");
        flexEditorGeneral.setWidget(13, 2, cuentaBancoTxtBox);

        flexEditorGeneral.setWidget(14, 0, new HTML(htmlRowSpc));
        flexEditorGeneral.setHTML(15, 0, "Cuenta CIMAV");
        flexEditorGeneral.setWidget(16, 0, cuentaCimavTxtBox);

        FlexTable.FlexCellFormatter cellFormatterLaboral = flexEditorLaboral.getFlexCellFormatter();

        flexEditorLaboral.setCellSpacing(0);
        flexEditorLaboral.setCellPadding(0);

        String width = "262px";
        sedeChosen = new ValueListBox<>(new Renderer<ESede>() {
            @Override
            public String render(ESede object) {
                if (object == null) {
                    return "None";
                }
                return object.getNombre();
            }

            @Override
            public void render(ESede object, Appendable appendable) throws IOException {
                String s = render(object);
                appendable.append(s);
            }
        });
        List<ESede> sedes = Arrays.asList(ESede.values());
        sedeChosen.setValue(ESede.CHIHUAHUA); //default
        sedeChosen.setAcceptableValues(sedes);
        sedeChosen.setWidth(width);
        //fechaIngresoDatePicker = new FechaPicker(width);
        //        fechaContratoFinDatePicker = new FechaPicker(width);
        //        fechaContratoInicioDatePicker = new FechaPicker(width);
        //        fechaBajaDatePicker = new FechaPicker(width);
        //        fechaAntiguedadDatePicker = new FechaPicker(width);
        //        fechaSNIDatePicker = new FechaPicker(width);
        List<EStatusEmpleado> status = Arrays.asList(EStatusEmpleado.values());
        statusEmpladoChose = new ValueListBox<>(new Renderer<EStatusEmpleado>() {
            @Override
            public String render(EStatusEmpleado object) {
                if (object == null) {
                    return "Nada";
                }
                return object.getNombre();
            }

            @Override
            public void render(EStatusEmpleado object, Appendable appendable) throws IOException {
                String s = render(object);
                appendable.append(s);
            }
        });
        statusEmpladoChose.setValue(EStatusEmpleado.ACTIVO); //default
        statusEmpladoChose.setAcceptableValues(status);
        statusEmpladoChose.setWidth(width);
        jefeChosen = new JefeChosen();
        jefeChosen.setWidth("400px");

        grupoChosen = new ValueListBox<>(new Renderer<EGrupo>() {
            @Override
            public String render(EGrupo object) {
                if (object == null) {
                    return "Ninguno";
                }
                return object.getCode() + " " + object.getName();
            }

            @Override
            public void render(EGrupo object, Appendable appendable) throws IOException {
                String s = render(object);
                appendable.append(s);
            }
        });
        List<EGrupo> grupos = Arrays.asList(EGrupo.values());
        grupoChosen.setValue(EGrupo.AYA); //default
        grupoChosen.setAcceptableValues(grupos);
        grupoChosen.setWidth("400px");

        tabuladorChosen = new TabuladorChosen();
        tabuladorChosen.setWidth(width);
        tipoEmpleadoChosen = new TipoEmpleadoChosen();
        tipoEmpleadoChosen.setWidth(width);
        tipoContratoChosen = new TipoContratoChosen();
        tipoContratoChosen.setWidth(width);
        tipoAntiguedadChosen = new TipoAntiguedadChosen();
        tipoAntiguedadChosen.setWidth(width);
        tipoSniChosen = new TipoSNIChosen();
        tipoSniChosen.setWidth(width);
        numSNITxtBox = new TextBox();
        numSNITxtBox.setWidth(width);
        numEstimulosProductividadTxtBox = new TextBox();
        numEstimulosProductividadTxtBox.setWidth("162px");
        porcenSegSepacionIndTxtBox = new TextBox();
        porcenSegSepacionIndTxtBox.setWidth("162px");

        pensionUI = new PensionUI();

        //        pensionTipo = new ValueListBox<>(new Renderer<ETipoPension>() {
        //            @Override
        //            public String render(ETipoPension object) {
        //                if (object == null) {
        //                    return "None";
        //                }
        //                return object.getNombre();
        //            }
        //
        //            @Override
        //            public void render(ETipoPension object, Appendable appendable) throws IOException {
        //                String s = render(object);
        //                appendable.append(s);
        //            }
        //        });
        //        List<ETipoPension> tiposPension = Arrays.asList(ETipoPension.values());
        //        pensionTipo.setValue(ETipoPension.SIN); //default
        //        pensionTipo.setAcceptableValues(tiposPension);
        //        pensionTipo.setWidth(width);
        //        //pensionTipo.getElement().setAttribute("style", "width: inherit;");
        //        seleccionarConceptos = new Button("", IconType.GEAR, new ClickHandler() {
        //            @Override
        //            public void onClick(ClickEvent event) {
        //                Window.alert("Hellowwwwww");
        //            }
        //        });
        //        seleccionarConceptos.setSize(ButtonSize.SMALL);
        //        divTipo = new Div();
        //        divTipo.getElement().setAttribute("style", "display: -webkit-box;");
        //        divTipo.add(pensionTipo);
        //        divTipo.add(seleccionarConceptos);

        pensionBanco = new ValueListBox<>(new Renderer<EBanco>() {
            @Override
            public String render(EBanco object) {
                if (object == null) {
                    return "None";
                }
                return object.getNombre();
            }

            @Override
            public void render(EBanco object, Appendable appendable) throws IOException {
                String s = render(object);
                appendable.append(s);
            }
        });
        pensionBanco.setValue(EBanco.BANORTE); //default
        pensionBanco.setAcceptableValues(bancos);
        pensionBanco.setWidth(width);
        pensionPorcentaje = new TextBox();
        pensionPorcentaje.setWidth("162px");
        pensionBeneficiario = new TextBox();
        pensionBeneficiario.setWidth("400px");
        pensionCuenta = new TextBox();
        pensionCuenta.setWidth(width);

        int row = 1;
        flexEditorLaboral.setHTML(row, 0, "Sede");
        flexEditorLaboral.setWidget(row, 1, new HTML(htmlColSpc));
        flexEditorLaboral.setHTML(row, 2, "Departamento");
        flexEditorLaboral.setWidget(row, 3, new HTML(htmlColSpc));
        flexEditorLaboral.setHTML(row, 4, "Status");
        row++;
        flexEditorLaboral.setWidget(row, 0, sedeChosen);
        flexEditorLaboral.setWidget(row, 2, deptoChosen);
        flexEditorLaboral.setWidget(row, 4, statusEmpladoChose);
        row++;
        flexEditorLaboral.setWidget(row, 0, new HTML(htmlRowSpc));
        row++;
        flexEditorLaboral.setHTML(row, 0, "Jefe");
        flexEditorLaboral.setWidget(row, 3, new HTML(htmlColSpc));
        flexEditorLaboral.setHTML(row, 4, "Proyecto");
        row++;
        flexEditorLaboral.setWidget(row, 0, jefeChosen);
        cellFormatterLaboral.setColSpan(row, 0, 3);
        flexEditorLaboral.setWidget(row, 2, new Label("Not Yet..."));
        row++;
        flexEditorLaboral.setWidget(row, 0, new HTML(htmlRowSpc));
        row++;
        flexEditorLaboral.setHTML(row, 0, "Grupo");
        flexEditorLaboral.setWidget(row, 1, new HTML(htmlColSpc));
        flexEditorLaboral.setHTML(row, 2, "Nivel tabulador");
        row++;
        flexEditorLaboral.setWidget(row, 0, grupoChosen);
        flexEditorLaboral.setWidget(row, 2, tabuladorChosen);
        row++;
        flexEditorLaboral.setWidget(row, 0, new HTML(htmlRowSpc));
        row++;
        flexEditorLaboral.setHTML(row, 0, "Tipo empleado");
        flexEditorLaboral.setWidget(row, 1, new HTML(htmlColSpc));
        flexEditorLaboral.setHTML(row, 2, "Tipo contrato");
        row++;
        flexEditorLaboral.setWidget(row, 0, tipoEmpleadoChosen);
        flexEditorLaboral.setWidget(row, 2, tipoContratoChosen);
        row++;
        flexEditorLaboral.setWidget(row, 0, new HTML(htmlRowSpc));
        row++;
        flexEditorLaboral.setWidget(row, 0, new HTML(htmlRowSpc));
        row++;
        flexEditorLaboral.setHTML(row, 0, "Fecha ingreso HERE");
        flexEditorLaboral.setWidget(row, 1, new HTML(htmlColSpc));
        flexEditorLaboral.setHTML(row, 2, "Fecha inicio contrato");
        flexEditorLaboral.setWidget(row, 3, new HTML(htmlColSpc));
        flexEditorLaboral.setHTML(row, 4, "Fecha fin contrato");
        row++;
        flexEditorLaboral.setWidget(row, 0, fechaIngresoDatePicker);
        flexEditorLaboral.setWidget(row, 2, fechaContratoInicioDatePicker);
        flexEditorLaboral.setWidget(row, 4, fechaContratoFinDatePicker);
        row++;
        flexEditorLaboral.setWidget(row, 0, new HTML(htmlRowSpc));
        row++;
        flexEditorLaboral.setHTML(row, 0, "Tipo antiguedad");
        flexEditorLaboral.setWidget(row, 1, new HTML(htmlColSpc));
        flexEditorLaboral.setHTML(row, 2, "Fecha antiguedad");
        row++;
        flexEditorLaboral.setWidget(row, 0, tipoAntiguedadChosen);
        flexEditorLaboral.setWidget(row, 2, fechaAntiguedadDatePicker);
        row++;
        flexEditorLaboral.setWidget(row, 0, new HTML(htmlRowSpc));
        row++;
        flexEditorLaboral.setHTML(row, 0, "Nivel SNI");
        flexEditorLaboral.setWidget(row, 1, new HTML(htmlColSpc));
        flexEditorLaboral.setHTML(row, 2, "Nm SNI");
        flexEditorLaboral.setWidget(row, 3, new HTML(htmlColSpc));
        flexEditorLaboral.setHTML(row, 4, "Fecha SNI");
        row++;
        flexEditorLaboral.setWidget(row, 0, tipoSniChosen);
        flexEditorLaboral.setWidget(row, 2, numSNITxtBox);
        flexEditorLaboral.setWidget(row, 4, fechaSNIDatePicker);
        //        row++;
        //        cellFormatterLaboral.setColSpan(row, 0, 5);
        //        flexEditorLaboral.setWidget(row, 0, new HTML("<span style='padding-bottom: 10px; display: block; border-bottom: 1px solid lightgray;;'></span>"));
        row++;
        flexEditorLaboral.setHTML(row, 0, "Nmero estmulos");
        flexEditorLaboral.setHTML(row, 2, "% Seg. Sep. Ind.");
        row++;
        flexEditorLaboral.setWidget(row, 0, numEstimulosProductividadTxtBox);
        flexEditorLaboral.setWidget(row, 2, porcenSegSepacionIndTxtBox);

        row++;
        cellFormatterLaboral.setColSpan(row, 0, 5);
        flexEditorLaboral.setWidget(row, 0, new HTML(
                "<span style='overflow: hidden; float:left; padding-right:8px;'>Pensin Alimenticia</span><span style='display:-webkit-box; padding-bottom: 10px; border-bottom: 1px solid lightgray;;'></span>"));
        row++;
        row++;
        flexEditorLaboral.setHTML(row, 0, "Tipo");
        flexEditorLaboral.setWidget(row, 1, new HTML(htmlColSpc));
        flexEditorLaboral.setHTML(row, 2, "Porcentaje");
        row++;
        //flexEditorLaboral.setWidget(row, 0, divTipo);
        flexEditorLaboral.setWidget(row, 0, pensionUI);
        flexEditorLaboral.setWidget(row, 2, pensionPorcentaje);
        row++;
        flexEditorLaboral.setHTML(row, 0, "Beneficiario");
        flexEditorLaboral.setWidget(row, 1, new HTML(htmlColSpc));
        flexEditorLaboral.setHTML(row, 2, "Banco");
        flexEditorLaboral.setWidget(row, 3, new HTML(htmlColSpc));
        flexEditorLaboral.setHTML(row, 4, "Cuenta");
        row++;
        flexEditorLaboral.setWidget(row, 0, pensionBeneficiario);
        flexEditorLaboral.setWidget(row, 2, pensionBanco);
        flexEditorLaboral.setWidget(row, 4, pensionCuenta);

        FlexTable.FlexCellFormatter cellFormatterPersonal = flexEditorPersonal.getFlexCellFormatter();

        flexEditorPersonal.setCellSpacing(0);
        flexEditorPersonal.setCellPadding(0);

        sexoChose = new ValueListBox<>(new Renderer<ESexo>() {
            @Override
            public String render(ESexo object) {
                if (object == null) {
                    return "Nada";
                }
                return object.getNombre();
            }

            @Override
            public void render(ESexo object, Appendable appendable) throws IOException {
                String s = render(object);
                appendable.append(s);
            }
        });
        List<ESexo> sexos = Arrays.asList(ESexo.values());
        sexoChose.setAcceptableValues(sexos);
        sexoChose.setWidth("244px");

        edoCivilChose = new ValueListBox<>(new Renderer<EEdoCivil>() {
            @Override
            public String render(EEdoCivil object) {
                if (object == null) {
                    return "Nada";
                }
                return object.getNombre();
            }

            @Override
            public void render(EEdoCivil object, Appendable appendable) throws IOException {
                String s = render(object);
                appendable.append(s);
            }
        });
        List<EEdoCivil> edoCiviles = Arrays.asList(EEdoCivil.values());
        edoCivilChose.setAcceptableValues(edoCiviles);
        edoCivilChose.setWidth("244px");

        direccionCalle = new TextBox();
        direccionCalle.setWidth(width);
        direccionColonia = new TextBox();
        direccionColonia.setWidth(width);
        direccionCP = new TextBox();
        direccionCP.setWidth(width);
        telefono = new TextBox();
        telefono.setWidth(width);
        emailPersonal = new TextBox();
        emailPersonal.setWidth(width);

        row = 1;
        flexEditorPersonal.setHTML(row, 0, "Sexo");
        flexEditorPersonal.setWidget(row, 1, new HTML(htmlColSpc));
        flexEditorPersonal.setHTML(row, 2, "Edo civil");
        flexEditorPersonal.setWidget(row, 3, new HTML(htmlColSpc));
        flexEditorPersonal.setHTML(row, 4, "Fecha nacimiento");
        row++;
        flexEditorPersonal.setWidget(row, 0, sexoChose);
        flexEditorPersonal.setWidget(row, 2, edoCivilChose);
        flexEditorPersonal.setWidget(row, 4, fechaNacimientoDatePicker);
        row++;
        flexEditorPersonal.setWidget(row, 0, new HTML(htmlRowSpc));
        row++;
        flexEditorPersonal.setHTML(row, 0, "Calle");
        flexEditorPersonal.setWidget(row, 1, new HTML(htmlColSpc));
        flexEditorPersonal.setHTML(row, 2, "Colonia");
        flexEditorPersonal.setWidget(row, 3, new HTML(htmlColSpc));
        flexEditorPersonal.setHTML(row, 4, "CP");
        row++;
        flexEditorPersonal.setWidget(row, 0, direccionCalle);
        flexEditorPersonal.setWidget(row, 2, direccionColonia);
        flexEditorPersonal.setWidget(row, 4, direccionCP);
        row++;
        flexEditorPersonal.setHTML(row, 0, "Telfono");
        row++;
        flexEditorPersonal.setWidget(row, 0, telefono);
        row++;
        flexEditorPersonal.setHTML(row, 0, "Email personal");
        row++;
        flexEditorPersonal.setWidget(row, 0, emailPersonal);

        //        editor.setHTML(2, 0, "Descripcin");
        //        cellFormatter.setColSpan(2, 0, 2);
        //        cellFormatter.setHorizontalAlignment(2, 0, HasHorizontalAlignment.ALIGN_LEFT);
        //        editor.setWidget(3, 0, txt3);
        //        cellFormatter.setColSpan(3, 0, 2);

        saveBtn.addClickHandler(new SaveClickHandler());
        cancelBtn.addClickHandler(new CancelClickHandler());

        //        EmpleadosProvider.get().addMethodExecutedListener(new ProviderMethodExecutedListener());

    }

    private class BinderPropertyChange implements PropertyChangeHandler<Object> {
        @Override
        public void onPropertyChange(PropertyChangeEvent<Object> event) {
            // >>>            EmpleadosProvider.get().dataProvider.refresh();

            // becomes Dirty
            empleadoSelected.becomesDirty();
            updateWidgets();
        }
    }

    private EmpleadoREST getEmpleadosREST() {
        if (empleadoREST == null) {
            empleadoREST = new EmpleadoREST();

            empleadoREST.addRESTExecutedListener(new RestMethodExecutedListener());
        }
        return empleadoREST;
    }

    private class RestMethodExecutedListener implements BaseREST.RESTExecutedListener {

        @Override
        public void onRESTExecuted(MethodEvent methodEvent) {
            if (EMethod.CREATE.equals(methodEvent.getMethod())) {
                if (ETypeResult.SUCCESS.equals(methodEvent.getTypeResult())) {

                    Growl.growl("Empleado nuevo insertado");
                    updateWidgets();

                    Empleado created = (Empleado) methodEvent.getResult();
                    // avisar a EmpleadosUi y enviarle el nuevo a la lista
                    methodEvent.setResult(created.toBase());
                    onActionEditor(methodEvent);
                }
            } else if (EMethod.UPDATE.equals(methodEvent.getMethod())) {
                if (ETypeResult.SUCCESS.equals(methodEvent.getTypeResult())) {
                    // methodEvent.getResult() no regresa nada
                    Growl.growl("Empleado actualizado");
                    empleadoSelected.cleanDirty();
                    updateWidgets();

                    // avisar a EmpleadosUi y enviarle los cambios para que los actualize
                    methodEvent.setResult(empleadoSelected.toBase());
                    onActionEditor(methodEvent);

                } else {
                    Window.alert("Fall actualizacin de Empleado. " + methodEvent.getReason());
                }

            } else if (EMethod.FIND_BY_ID.equals(methodEvent.getMethod())) {
                if (ETypeResult.SUCCESS.equals(methodEvent.getTypeResult())) {
                    // re-carga el provider con el empleado reloaded
                    Empleado reloaded = (Empleado) methodEvent.getResult();

                    empleadoSelected = reloaded;

                    updateWidgets();

                    if (empleadoBinder == null) {
                        bindModel();
                    }

                    empleadoBinder.setModel(empleadoSelected != null ? empleadoSelected : new Empleado());//, InitialState.FROM_MODEL, true);

                    jefeChosen.setUrlPhotoPath();

                    if (empleadoSelected != null) {
                        nombreTxtBox.setFocus(true);
                    }

                }
            }

        }
    }

    private void bindModel() {
        /* Binding */
        try {
            empleadoBinder = DataBinder.forType(Empleado.class);
            empleadoSelected = empleadoBinder.bind(nombreTxtBox, "nombre").bind(paternoTxtBox, "apellidoPaterno")
                    .bind(maternoTxtBox, "apellidoMaterno").bind(rfcTxtBox, "rfc").bind(curpTxtBox, "curp")
                    .bind(fechaSNIDatePicker, "fechaSni").bind(imssTxtBox, "imss")
                    .bind(imssClinicaChosen, "clinica").bind(bancoChosen, "banco")
                    .bind(cuentaBancoTxtBox, "cuentaBanco").bind(cuentaCimavTxtBox, "cuentaCimav")
                    //                // laboral
                    .bind(sedeChosen, "sede").bind(deptoChosen.getChosen(), "departamento")
                    .bind(fechaIngresoDatePicker, "fechaIngreso").bind(fechaSNIDatePicker, "fechaSni")
                    .bind(fechaContratoFinDatePicker, "fechaFinContrato")
                    .bind(fechaContratoInicioDatePicker, "fechaInicioContrato")
                    .bind(fechaBajaDatePicker, "fechaBaja").bind(fechaAntiguedadDatePicker, "fechaAntiguedad")
                    .bind(statusEmpladoChose, "status").bind(jefeChosen.getChosen(), "jefe")
                    .bind(grupoChosen, "grupo").bind(tabuladorChosen.getChosen(), "nivel")
                    .bind(tipoEmpleadoChosen.getChosen(), "tipoEmpleado")
                    .bind(tipoContratoChosen.getChosen(), "tipoContrato")
                    .bind(tipoAntiguedadChosen.getChosen(), "tipoAntiguedad")
                    .bind(tipoSniChosen.getChosen(), "tipoSNI").bind(numSNITxtBox, "numSni")
                    .bind(numEstimulosProductividadTxtBox, "estimulosProductividad")
                    .bind(porcenSegSepacionIndTxtBox, "porcenSegSeparacionInd").bind(pensionBanco, "pensionBanco")
                    //.bind(pensionTipo, "pensionTipo")
                    .bind(pensionUI.get(), "pensionTipo").bind(pensionPorcentaje, "pensionPorcen")
                    .bind(pensionBeneficiario, "pensionBeneficiario").bind(pensionCuenta, "pensionCuenta")
                    // personal
                    .bind(sexoChose, "sexo").bind(edoCivilChose, "edoCivil")
                    .bind(fechaNacimientoDatePicker, "fechaNacimiento").bind(direccionCalle, "direccionCalle")
                    .bind(direccionColonia, "direccionColonia").bind(direccionCP, "direccionCP")
                    .bind(telefono, "telefono").bind(emailPersonal, "emailPersonal").getModel();

            empleadoBinder.addPropertyChangeHandler(new BinderPropertyChange());

        } catch (Exception e) {
            Window.alert("EmpleadosEditorUI DataBinder.bind:> " + e.getMessage());
        }
    }

    private class SaveClickHandler implements ClickHandler {

        @Override
        public void onClick(ClickEvent event) {

            if (empleadoSelected == null) {
                Window.alert("EmpleadosEditorUI.SaveClickHandler empleadoSelected es NULL.");
                return;
            }

            if (isValid()) {
                boolean isNuevo = empleadoSelected == null || empleadoSelected.getId() == null
                        || empleadoSelected.getId() <= 0;
                if (isNuevo) {
                    // add
                    getEmpleadosREST().add(empleadoSelected);
                } else {
                    // update
                    getEmpleadosREST().update(empleadoSelected);
                }
            }

        }
    }

    private boolean isValid() {
        boolean result = true;

        Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
        Set<ConstraintViolation<Empleado>> violations = validator.validate(empleadoSelected);
        if (!violations.isEmpty()) {
            result = false;
            StringBuilder builder = new StringBuilder();
            for (ConstraintViolation<Empleado> violation : violations) {
                //                    builder.append(violation.getMessage());
                //                    builder.append(" : <i>(");
                //                    builder.append(violation.getPropertyPath().toString());
                //                    builder.append(" = ");
                //                    builder.append("" + violation.getInvalidValue());
                //                    builder.append(")</i>");
                //                    builder.append("<br/>");
                builder.append(" ").append(violation.getMessage()).append("\n");
                builder.append("  ").append(violation.getPropertyPath().toString()).append(" = ")
                        .append(violation.getInvalidValue()).append("\n\n");

            }
            Window.alert(builder.toString());
        }

        return result;
    }

    private class CancelClickHandler implements ClickHandler {

        @Override
        public void onClick(ClickEvent event) {
            if (empleadoSelected == null) {
                Window.alert("EmpleadosEditorUI.SaveClickHandler empleadoSelected es NULL.");
                return;
            }
            boolean isNuevo = empleadoSelected == null || empleadoSelected.getId() == null
                    || empleadoSelected.getId() <= 0;
            if (isNuevo) {
                setSelectedBean(null);
            } else {
                // cancelar update
                MethodEvent methodEvent = new MethodEvent(EMethod.CANCEL, ETypeResult.SUCCESS,
                        "Usuario cancela cambios");
                onActionEditor(methodEvent);

            }
        }
    }

    /**
     * Si el panel es activo, esconde el glass. Si el panel no es activo,
     * muestra el glass. El glass es un panel que se antepone o pospone segun
     * sea el caso.
     */
    private void setActive(boolean active) {
        int z_index_val = active ? -200 : 200;
        panelEditorGlass.getElement().getStyle().setZIndex(z_index_val);
    }

    public void setSelectedBean(Integer idEmpleadoBaseSelected) {

        idEmpleadoBaseSelected = idEmpleadoBaseSelected == null ? 0 : idEmpleadoBaseSelected;

        getEmpleadosREST().findEmpleadoById(idEmpleadoBaseSelected);

    }

    public void addNewEmpleado() {

        tabEditorGeneral.showTab();
        nombreTxtBox.setFocus(true);

        Empleado nuevo = new Empleado();
        empleadoBinder.setModel(nuevo);

        empleadoSelected = nuevo;

        updateWidgets();

        jefeChosen.setUrlPhotoPath();

    }

    private void updateWidgets() {
        boolean empSelNotNull = empleadoSelected != null;

        this.setActive(empSelNotNull);

        if (empleadoSelected != null && (empleadoSelected.getId() == null || empleadoSelected.getId() <= 0)) {
            // cuando es nuevo, hacerlo dirty
            empleadoSelected.becomesDirty();
        }

        this.saveBtn.setEnabled(empSelNotNull && this.empleadoSelected.isDirty());
        this.cancelBtn.setEnabled(empSelNotNull && this.empleadoSelected.isDirty());

        this.txtStatus.setVisible(this.saveBtn.isEnabled());

        if (empSelNotNull) {
            String strStatus = empleadoSelected.getId() != null && empleadoSelected.getId() > 0 ? "Actualizacin"
                    : "Insercin";
            this.txtStatus.setText(strStatus);
        }

    }

    // <editor-fold defaultstate="collapsed" desc="interface ActionEditorListener"> 
    public interface ActionEditorListener extends java.util.EventListener {
        void onActionEditor(MethodEvent restEvent);
    }

    private final ArrayList listeners = new ArrayList();

    public void addActionEditorListener(ActionEditorListener listener) {
        listeners.add(listener);
    }

    public void removeActionEditorListener(ActionEditorListener listener) {
        listeners.remove(listener);
    }

    public void onActionEditor(MethodEvent restEvent) {
        for (Iterator it = listeners.iterator(); it.hasNext();) {
            ActionEditorListener listener = (ActionEditorListener) it.next();
            listener.onActionEditor(restEvent);
        }
    }
    // </editor-fold>

}