Hace poco me encontré con un problema que necesitaba saber como obtener las diferencias entre dos objetos de la misma clase en java, buscando por Google, presentar varios API's que realizan esta función, debido a la poca documentación y la dificultad de uso cuando se requiere algo tan sencillo decidí crear mi propio código que les dejo a continuación.
Archivos de código aquí:
Código:
//Clase que hace la comparación de los objetos de la misma clase para buscar diferencias. import ValorCambio; import java.lang.reflect.InvocationTargetException; import java.util.AbstractList; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import org.apache.commons.beanutils.BeanUtils; public class ValidadorCambios { public ListCamposCambiados(Object objetoOriginal,Object objetoModificado){ List valoresModificados = new ArrayList (); Object f1 = (Object)objetoOriginal; Object f2 = (Object)objetoModificado; try { Map properties1 = BeanUtils.describe(f1); //System.out.println("Propiedades" + properties1.values()); Map properties2 = BeanUtils.describe(f2); //System.out.println("Propiedades" + properties2.values()); String resultado = ""; for(int i=0;i< properties1.size() ;i++){ String p1 = (String)properties1.values().toArray()[i]; String p2 =(String)properties2.values().toArray()[i]; String campo = (String)properties1.keySet().toArray()[i]; if(p1==null){ p1 = ""; } if(p2==null){ p2= ""; } System.out.println(campo+"P1**" + p1 + "*P2**"+ p2); if(p1==null && p2==null ){ p1=""; p2=""; } if(p1==null && p2!=null ){ resultado += "*diffnull*" + (properties1.keySet().toArray())[i]; } if(p1!=null && p2==null ){ resultado += "*diffnull*" + (properties1.keySet().toArray())[i]; } if(p1!=null && p2!=null){ if(!p1.equals(p2)){ ValorCambio valorCambio = new ValorCambio(); valorCambio.setNombreCampo(""+(properties1.keySet().toArray())[i]); valorCambio.setValorAnterior(p1); valorCambio.setValorNuevo(p2); valoresModificados.add(valorCambio); resultado += "*diferencia*"+(properties1.keySet().toArray())[i]+"*ValorAnterior*"+p1+"*ValorNuevo*"+p2+"\n "; } } } System.out.println("RESULTADO" + resultado); } catch (IllegalAccessException ex) { Logger.getLogger(FormularioDAO.class.getName()).log(Level.SEVERE, null, ex); } catch (InvocationTargetException ex) { Logger.getLogger(FormularioDAO.class.getName()).log(Level.SEVERE, null, ex); } catch (NoSuchMethodException ex) { Logger.getLogger(FormularioDAO.class.getName()).log(Level.SEVERE, null, ex); } return valoresModificados; } }
//Clase Valor cambio, se recorre para saber que campo cambio y en que valor. public class ValorCambio { private String nombreCampo; private String valorAnterior; private String valorNuevo; /** * @return the nombreCampo */ public String getNombreCampo() { return nombreCampo; } /** * @param nombreCampo the nombreCampo to set */ public void setNombreCampo(String nombreCampo) { this.nombreCampo = nombreCampo; } /** * @return the valorAnterior */ public String getValorAnterior() { return valorAnterior; } /** * @param valorAnterior the valorAnterior to set */ public void setValorAnterior(String valorAnterior) { this.valorAnterior = valorAnterior; } /** * @return the valorNuevo */ public String getValorNuevo() { return valorNuevo; } /** * @param valorNuevo the valorNuevo to set */ public void setValorNuevo(String valorNuevo) { this.valorNuevo = valorNuevo; } }
Comentarios
Publicar un comentario