Algunas ocasiones tenemos que contar una cantidad valores en los atributos, generalmente tendríamos que hacerlo propiedad por propiedad.
Contamos con un Entity
necesitaríamos un código como donde veríamos múltiples condiciones y tenemos que usar cada atributo mediante el método get, en este ejemplo serian 31 campos. Imaginemos el escenario que sea una cantidad mayor, tendríamos un segmento de código mas o menos como el que mostramos aquí.
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());
}
}