private List<MontoTotalPorFuente> procesarTotalesPorFuente( List<MontoPorDerecho> montosSACM, List<MontoPorDerecho> montosOtros, List<Fuente> fuentes, Session session) { List<MontoTotalPorFuente> resultado = new LinkedList<>(); for (Fuente fuente : fuentes) { MontoTotalPorFuente montoTotalPorFuente = new MontoTotalPorFuente(); montoTotalPorFuente.setFuente(fuente); resultado.add(montoTotalPorFuente); List<DerechoExterno> derechos = getDerechosPorFuente(fuente, session); for (DerechoExterno derecho : derechos) { MontoTotalPorDerecho montoTotalPorDerecho = new MontoTotalPorDerecho(); montoTotalPorDerecho.setDerecho(derecho); montoTotalPorFuente.agregarMontoPorDerecho(montoTotalPorDerecho); for (int trimestre = 1; trimestre <= 4; trimestre++) { MontoPorDerecho montoSACM = buscarPorFuenteDerechoYTrimestre(montosSACM, fuente, derecho, trimestre); if (montoSACM != null) { montoTotalPorDerecho.setMontoSACM(montoSACM.getMonto(), trimestre); } MontoPorDerecho montoOtros = buscarPorFuenteDerechoYTrimestre(montosOtros, fuente, derecho, trimestre); if (montoOtros != null) { montoTotalPorDerecho.setMontoOtros(montoOtros.getMonto(), trimestre); } } } } return resultado; }
private MontoPorDerecho buscarPorFuenteDerechoYTrimestre( List<MontoPorDerecho> montos, Fuente fuente, Derecho derecho, int trimestre) { MontoPorDerecho resultado = null; Iterator<MontoPorDerecho> it = montos.iterator(); while (it.hasNext() && resultado == null) { MontoPorDerecho encontrado = it.next(); if (encontrado.getDerecho().equals(derecho) && encontrado.getFuente().equals(fuente) && encontrado.getTrimestre().equals(Integer.valueOf(trimestre))) { resultado = encontrado; it.remove(); } } return resultado; }