@Override public void execute(Caso caso) throws ActionExecutionException { if (caso.getTipoCaso().equals(EnumTipoCaso.PREVENTA.getTipoCaso())) { Cliente cliente = caso.getEmailCliente().getCliente(); List<Caso> lista = getJpaController().getCasoJpa().findDuplicatedCasosPreventaByClient(cliente); if (lista == null) { return; } Caso casoPreventaUnico = lista.get(0); lista.remove(0); if (casoPreventaUnico.getCasosHijosList() == null) { casoPreventaUnico.setCasosHijosList(new LinkedList<Caso>()); } while (!lista.isEmpty()) { Caso casoPreventa = lista.get(0); lista.remove(0); if ((casoPreventa.getCasosHijosList() != null) && (!casoPreventa.getCasosHijosList().isEmpty())) { for (Caso casoHijo : casoPreventa.getCasosHijosList()) { casoHijo.setIdCasoPadre(casoPreventaUnico); if (!casoPreventaUnico.getCasosHijosList().contains(casoHijo)) { casoPreventaUnico.getCasosHijosList().add(casoHijo); } try { getJpaController().mergeCasoWithoutNotify(casoPreventaUnico); getJpaController().mergeCasoWithoutNotify(casoHijo); } catch (Exception ex) { Logger.getLogger(RemoveDuplicatedCasoPreventaAction.class.getName()) .log(Level.SEVERE, null, ex); } } } casoPreventa.setCasosHijosList(null); try { getJpaController().mergeCasoWithoutNotify(casoPreventa); getJpaController().getCasoJpa().destroy(casoPreventa.getIdCaso()); } catch (Exception ex) { Logger.getLogger(RemoveDuplicatedCasoPreventaAction.class.getName()) .log(Level.SEVERE, null, ex); } } } }