Reflexion para contar valores en un datatable

Algunas ocasiones tenemos que contar una cantidad valores en los atributos, generalmente tendríamos que hacerlo propiedad por propiedad.

Contamos con un Entity

for (Agente a : agenteList) {
                t1 = 0;
                t2 = 0;
                t3 = 0;
                t4 = 0;
for (Reservadoagente r : reservadoagenteList) {
if(r.getTurno1() == 1 || r.getTurno2() == 1 || r.getTurno3() == 1 || r.getTurno4() ==1 ,,, r.getTurno31()==1 ){
t1++;
}
else{
    if(r.getTurno1() == 2 || r.getTurno2() == 2 || r.getTurno3() == 2 || r.getTurno4() ==2 ,,,       
        r.getTurno31()==2 ){
        t2++;

   }
else{
    if(r.getTurno1() == 3 || r.getTurno2() == 3 || r.getTurno3() == 3 || r.getTurno4() ==3 ,,,       
        r.getTurno31()==3){
        t3++;

   }else{
 if(r.getTurno1() == 4 || r.getTurno2() == 4 || r.getTurno3() == 4 || r.getTurno4() ==4 ,,,       
        r.getTurno31()==4){
        t2++;

   }
 }

}
...

Para evitar todo esto podemos usar el API reflexión.

Simplemente invocamos los métodos get de los atributos Turnodia, y comparamos el resultado para determinar si es un 1, 2, 3, 4. Y con esto tendremos un contador de cada valor,.

 private void totalizarTurnosAgente() {
        try {
            Integer t1 = 0;
            Integer t2 = 0;
            Integer t3 = 0;
            Integer t4 = 0;
            Integer row = -1;
            Integer horasmes = 0;
            for (Agente a : agenteList) {
                t1 = 0;
                t2 = 0;
                t3 = 0;
                t4 = 0;
                row++;
                Class noparams[] = {};
                for (Reservadoagente r : reservadoagenteList) {

                    if (r.getAgente().getCedula().equals(a.getCedula())) {
                        Class cls = r.getClass();
                        Object obj = r;
                        for (Method method : Reservadoagente.class.getDeclaredMethods()) {
                            if (method.getName().contains("getTurnodia")) {
                                String name = method.getName();
                                Method methodrun = cls.getDeclaredMethod(name, noparams);
                                Object result = methodrun.invoke(obj, null);
                                switch (Integer.parseInt(result.toString().trim())) {
                                    case 0:
                                        break;
                                    case 1:
                                        t1++;
                                        break;
                                    case 2:
                                        t2++;
                                        break;
                                    case 3:
                                        t3++;
                                        break;
                                    case 4:
                                        t4++;
                                        break;
                                    default:

                                }
                            }
                        }
                    }
                }
                reservadoagenteList.get(row).setT1(t1);
                reservadoagenteList.get(row).setT2(t2);
                reservadoagenteList.get(row).setT3(t3);
                reservadoagenteList.get(row).setT4(t4);
                horasmes = (t1 * 8) + (t2 * 8) + (t3 * 8) + (t4 * 6);
                reservadoagenteList.get(row).setHorasmes(horasmes);

            }
        } catch (Exception e) {
            JsfUtil.errorMessage("totalizarTurnosAgente() " + e.getLocalizedMessage());
        }

    }

Last updated