Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## com.ejie.r01f.jvt
Class JVTComparator

    java.lang.Object
      com.ejie.r01f.jvt.JVTComparator

public class JVTComparator
extends java.lang.Object

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 System.out.println(JVTComparator.composeDebugInfo( comp.getPlanTable() ); System.out.println("\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) { System.out.println(" OIDs = " + (operation.args[0] != null ? comp.getObjectOid(operation.args[0]):" obj null")); } else if (operation.args.length == 2) { System.out.println(" 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

### OPERATION_DESCS

    public static final java.lang.String[] OPERATION_DESCS

Constructor Detail

### JVTComparator

    public JVTComparator()

  Constructor por defecto

### JVTComparator

    public JVTComparator(XOMap map,
                         java.lang.Object objS1,
                         java.lang.Object objS2)
                  throws JVTComparatorException

  Constructor en base al mapeo de clases y miembros y los objetos a comparar. En el propio constructor se lanza la ejecución de la comparacion

Parameters:
  `map` - Fichero de mapeo de clases y miembros
  `objS1` - Objeto en el estado 1
  `objS2` - Objeto en el estado 2
Throws:
  `JVTComparatorException` - si ocurre un error durante la comparacion

Method Detail

### composeDebugInfo

    public java.lang.String composeDebugInfo()

  Compone información de depuración acerca de la pila de operaciones

  Returns:
    una cadena con las operaciones a ejecutar

### composeDebugInfo

    public 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() );

  Parameters:
    `planList` - La lista de operaciones se obtiene del objeto JVTComparator con el metodo getPlanTable()
  Returns:
    Una cadena con informacion de depuracion

### reset

    public 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

### doComparision

    public void doComparision(XOMap map,
                              java.lang.Object objS1,
                              java.lang.Object objS2)
                       throws JVTComparatorException

  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).

  Parameters:
    `map` - Fichero de mapeo de clases y miembros
    `objS1` - Objeto en el estado 1
    `objS2` - Objeto en el estado 2
  Throws:
    `JVTComparatorException` - si ocurre un error durante la comparacion

### nextOperation

    public JVTComparator.PlanTableOperation nextOperation()

  Obtiene la siguiente operacion en la lista

  Returns:
    Una operacion a realizar o null si no hay mas operaciones para realizar

### prevOperation

    public JVTComparator.PlanTableOperation prevOperation()

  Obtiene la operacion anterior en la lista

  Returns:
    Una operacion a realizar o null si no hay operaciones anteriores

### getPlanTableIterator

    public java.util.Iterator getPlanTableIterator()

  Obtiene un iterador por las operaciones a realizar

  Returns:
    El iterador o null si la lista de operaciones es null

### getPlanTable

    public java.util.List getPlanTable()

  Devuelve la lista de operaciones a realizar

  Returns:
    La lista de operaciones

### getObjectOid

    public java.lang.Object getObjectOid(java.lang.Object obj)
                                  throws JVTComparatorException

  Metodo de utilidad que obtiene el oid de un objeto

  Parameters:
    `obj` - El objeto cuyo oid se quiere obtener
  Returns:
    El oid
  Throws:
    `JVTComparatorException` - Si existe alguna excepción en el proceso de comparación

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD