|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectcom.ejie.r01f.jvt.JVTComparator
Clase que compara dos objetos JVT (Java Value Types), buscando las diferencias en su estado y en base a ellas compone un "plan de trabajo" con los cambios a realizar Se tienen dos copias de objetos JVT, uno que está en un estado S1 y otro que está en un estado S2 (estado S1 después de que se hayan modificado datos, creado o borrado objetos dependientes) Esta clase se encarga de buscar las diferencias entre el estado S1 y el estado S2 componiendo un plan de trabajo con las actualizaciones a realizar. El objetivo es construir una lista que ponga "en plano" el grafo del objeto junto con las operaciones que hay que realizar para pasar del estado S1 al estado S2 El resultado de comparar las siguientes jerarquías de objetos: Obj1 Obj1 (estado modificado) |_Obj1.1 |_Obj1.1 (inalterado) | |_Obj1.1.1 | |_Obj1.1.1 (estado modificado) | |_Obj1.1.2 | |_(El objeto 1.1.2 y sus descendientes han sido borrados) | |_Obj1.1.2.1 |_(El objeto 1.2 y sus descendientes han sido borrados) |_Obj1.2 |_Obj1.3 (nuevo objeto junto con una jerarquia inferior nueva) |_Obj1.2.1 |_Obj1.3.1 |_Obj1.3.2 |_Obj1.3.2.1 Será la siguiente lista de instrucciones a realizar: 1 [Actualizar el estado de Obj1] 2 [Actualizar el estado de Obj1.1.1] 3 [Borrar Obj1.1.2 (y sus descendientes) de los hijos de Obj1.1] 4 [Borrar Obj1.2 (y sus descendientes)] 5 [Insertar Obj1.3 como hijo de Obj1] 6 [Insertar Obj1.3.1 como hijo de Obj1.3] 7 [Insertar Obj1.3.2 como hijo de Obj1.3] 8 [Insertar Obj1.3.2.1 como hijo de Obj1.3.2] Las posibles operaciones a realizar son: - Actualizar el estado del objeto - Crear o borrar un objeto dependiente con el que hay una relacion de COMPOSICION (el objeto dependiente NO tiene vida propia sin el padre: "borrado en cascada") - Hacer o quitar un link con un objeto dependiente con el que hay una relacion de AGREGACIÓN (el objeto dependiente TIENE vida propia sin este objeto: "no hay borrado en cascada") El algoritmo es RECURSIVO con las siguientes llamadas: _compare(objS1,objS2) | ---> _processObjMembers(objS1,objS2) <---------------------------------------------------------| (dependiendo de si el objeto dependiente es una coleccion o un objeto simple) | |--> _processSet(parentObj,parentField,objsS1,objsS2) == COLECCION == | | | | | ----> _processSubSet(parentObj,parentField,objsMapS1,objsMapS2) | | | | | ---> _processObject(parentObj,parentField,objS1,objS2)-------->| (llamada recursiva) | | ---> _processObject(parentObj,parentField,objS1,objS2) == OBJETO SIMPLE == ----->| (llamada recursiva) Ejemplo de utilizacion: // Ejecutar la comparacion XOMap map = new XOMap(new FileInputStream(XMLProperties.get("r01d","mapFiles/contentObjects")) ); JVTComparator comp = new JVTComparator(map,cont1,cont2); // Pintar DEBUG R01FLog.to("r01f.test").fine(JVTComparator.composeDebugInfo( comp.getPlanTable() ); R01FLog.to("r01f.test").fine("\r\n\r\n\r\n############################ FIN DE LA COMPARACION ########################\r\n\r\n\r\n\r\n\r\n\r\n\r\n"); // Informacion de depuracion JVTComparator.PlanTableOperation operation = comp.nextOperation() ; while (operation != null) { System.out.print(operation.toString()); if (operation.args != null) { if (operation.args.length == 1) { R01FLog.to("r01f.test").fine(" OIDs = " + (operation.args[0] != null ? comp.getObjectOid(operation.args[0]):" obj null")); } else if (operation.args.length == 2) { R01FLog.to("r01f.test").fine(" OIDs = " + (operation.args[0] != null ? comp.getObjectOid(operation.args[0]):"obj null") + "," + (operation.args[1] != null ? comp.getObjectOid(operation.args[1]):"obj null")); } } operation = comp.nextOperation(); } } NOTA: Llamar al método reset cuando se reutilice el mismo comparador (con el mismo mapa) para comparar varias veces
Nested Class Summary | |
class |
JVTComparator.PlanTableOperation
|
Field Summary | |
static java.lang.String[] |
OPERATION_DESCS
|
Constructor Summary | |
JVTComparator()
Constructor por defecto |
|
JVTComparator(XOMap map,
java.lang.Object objS1,
java.lang.Object objS2)
Constructor en base al mapeo de clases y miembros y los objetos a comparar. |
Method Summary | |
java.lang.String |
composeDebugInfo()
Compone información de depuración acerca de la pila de operaciones |
static java.lang.String |
composeDebugInfo(java.util.List planList)
Pinta la informacion de depuración a partir de la lista de tareas Utilizacion: // Ejecutar la comparacion XOMap map = new XOMap(new FileInputStream(XMLProperties.get("r01d","mapFiles/contentObjects")) ); JVTComparator comp = new JVTComparator(map,cont1,cont2); JVTComparator.composeDebugInfo( comp.getPlanTable() ); |
void |
doComparision(XOMap map,
java.lang.Object objS1,
java.lang.Object objS2)
Ejecuta la comparacion de los objetos utilizando el mapeo especificado Compara dos objetos JVT para crear un "plan de trabajo":: Busca los cambios que ha podido haber entre el objeto en el estado 1 (inicial) y el estado2 (final). |
java.lang.Object |
getObjectOid(java.lang.Object obj)
Metodo de utilidad que obtiene el oid de un objeto |
java.util.List |
getPlanTable()
Devuelve la lista de operaciones a realizar |
java.util.Iterator |
getPlanTableIterator()
Obtiene un iterador por las operaciones a realizar |
JVTComparator.PlanTableOperation |
nextOperation()
Obtiene la siguiente operacion en la lista |
JVTComparator.PlanTableOperation |
prevOperation()
Obtiene la operacion anterior en la lista |
void |
reset()
Resetea el objeto para hacer otra comparación basada en el mismo mapa Llamar a este método cuando se reutilice el mismo comparador (con el mismo mapa) para comparar varias veces |
Methods inherited from class java.lang.Object |
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
public static final java.lang.String[] OPERATION_DESCS
Constructor Detail |
public JVTComparator()
public JVTComparator(XOMap map, java.lang.Object objS1, java.lang.Object objS2) throws JVTComparatorException
map
- Fichero de mapeo de clases y miembrosobjS1
- Objeto en el estado 1objS2
- Objeto en el estado 2
JVTComparatorException
- si ocurre un error durante la comparacionMethod Detail |
public java.lang.String composeDebugInfo()
public static java.lang.String composeDebugInfo(java.util.List planList)
planList
- La lista de operaciones se obtiene del objeto JVTComparator con el metodo getPlanTable()
public void reset()
public void doComparision(XOMap map, java.lang.Object objS1, java.lang.Object objS2) throws JVTComparatorException
map
- Fichero de mapeo de clases y miembrosobjS1
- Objeto en el estado 1objS2
- Objeto en el estado 2
JVTComparatorException
- si ocurre un error durante la comparacionpublic JVTComparator.PlanTableOperation nextOperation()
public JVTComparator.PlanTableOperation prevOperation()
public java.util.Iterator getPlanTableIterator()
public java.util.List getPlanTable()
public java.lang.Object getObjectOid(java.lang.Object obj) throws JVTComparatorException
obj
- El objeto cuyo oid se quiere obtener
JVTComparatorException
- Si existe alguna excepción en el proceso de comparación
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |