pl.slawas.diffs
Class TraceCreator

java.lang.Object
  extended by pl.slawas.diffs.TraceCreator

public class TraceCreator
extends java.lang.Object

Tracer - klasa narzedziowa do sledzenia zmian osnaczonych annotacjami Trace pol. Klasa wykorzystuje metody do kopiowania oparte o predefiniowane metody z klasy Duplicator

 Example: {
        //...
        // budowanie historii z uzyciem dynamicznych etykiet zmian 
        TracerParentMock copyNewObject = (TracerParentMock) Tracer.copy(testedObject4Track);
        getEntityManager().refresh(testedObject4Track);
 
        //przygotowanie dynamicznej listy etykiet
        Hashtable<String, String> labelList = new Hashtable<String, String>();
        labelList.put("id", "Identyfikator szefa");
        labelList.put("childId", "Identyfikator pracownika");
        List<TraceDifference> diffList = Tracer.diff(copyNewObject, testedObject4Track, labelList);
 
        // teraz mozna zapisac zmiany w historii
        List<History> historyList = new ArrayList<History>();
        for (TraceDifference diff : diffList) {
                log.debug("Nowa wartosc: {}", diff.getTargetValue());
                log.debug("Stara wartosc: {}", diff.getSourceValue());
                History newHistRow = new History();
                newHistRow.setNewVal(diff.getTargetValue());
                newHistRow.setOldVal(diff.getSourceValue());
                historyList.add(newHistRow);
        }
        getEntityManager().getTransaction().begin();
        ((AresDictionaryDAO) historyDAO).insertList(newHistRow);
        getEntityManager().getTransaction().commit();
 
        //teraz przywracamy obiekt do nowej wartosci
        Tracer.copy(testedObject4Track, copyOkClass);
        //...
 }
 

Version:
$Revision: 1.2.2.1 $
Author:
Slawomir Cichy <slawas@slawas.pl>
See Also:
Trace, pl.wp.ares.core.entities.TraceId, Duplicator

Field Summary
protected static Logger log
           
 
Constructor Summary
TraceCreator()
           
 
Method Summary
static java.lang.Object copy(java.lang.Object source)
          Kopiowanie obiektu do nowej instancji, klonowanie obiektu.
static java.lang.Object copy(java.lang.Object target, java.lang.Object source)
          Kopiowanie wartosci pol z jednego obiektu do drugiego.
static java.util.List<ObjectsDifference> diff(java.lang.Object target, java.lang.Object source)
          Metoda do wykonania porownania dwoch obiektow i wygenerowania listy zmian.
static java.util.List<ObjectsDifference> diff(java.lang.Object target, java.lang.Object source, java.util.Hashtable<java.lang.String,java.lang.String> labelList)
          Metoda do wykonania porownania dwoch obiektow i wygenerowania listy zmian.
static boolean equals(java.lang.Object target, java.lang.Object source)
          Porównanie dwóch obiektów.
static java.util.TimeZone getTimeZone()
           
static void setTimeZone(java.util.TimeZone timeZone)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

log

protected static final Logger log
Constructor Detail

TraceCreator

public TraceCreator()
Method Detail

copy

public static java.lang.Object copy(java.lang.Object source)
                             throws java.lang.InstantiationException,
                                    java.lang.IllegalAccessException,
                                    java.lang.IllegalArgumentException,
                                    java.lang.SecurityException,
                                    java.lang.reflect.InvocationTargetException,
                                    java.lang.NoSuchMethodException
Kopiowanie obiektu do nowej instancji, klonowanie obiektu. Powstaly obiekt ma skopiowane tylko te pola, dla ktorych ustwiona zostala annotacja Trace. Metoda nie nadaje sie do kopiowania (klonowania) calych obiektow, chyba ze wszystkie pola zostana oznaczone wczesniej wymieniona annotacja.

Parameters:
source - obiekt do skopiowania (sklonowania)
Returns:
kopia obiektu
Throws:
java.lang.InstantiationException
java.lang.IllegalAccessException
java.lang.IllegalArgumentException
java.lang.SecurityException
java.lang.reflect.InvocationTargetException
java.lang.NoSuchMethodException
See Also:
Trace, Duplicator.copy(Class, Object)

copy

public static java.lang.Object copy(java.lang.Object target,
                                    java.lang.Object source)
                             throws java.lang.InstantiationException,
                                    java.lang.IllegalAccessException,
                                    java.lang.IllegalArgumentException,
                                    java.lang.SecurityException,
                                    java.lang.reflect.InvocationTargetException,
                                    java.lang.NoSuchMethodException
Kopiowanie wartosci pol z jednego obiektu do drugiego. Powstaly obiekt ma skopiowane tylko te pola, dla ktorych ustwiona zostala annotacja Trace. Metoda nie nadaje sie do kopiowania zawartosci calych obiektow, chyba ze wszystkie pola zostana oznaczone wczesniej wymieniona annotacja.

Parameters:
target - obiekt, do ktorego sa kopiowane wartosci
source - obiekt, z ktorego sa kopiowane wartosci
Returns:
obiekt, do ktorego sa kopiowane wartosci
Throws:
java.lang.InstantiationException
java.lang.IllegalAccessException
java.lang.IllegalArgumentException
java.lang.SecurityException
java.lang.reflect.InvocationTargetException
java.lang.NoSuchMethodException
See Also:
Trace, Duplicator.copy(Class, Object, Object, int)

diff

public static java.util.List<ObjectsDifference> diff(java.lang.Object target,
                                                     java.lang.Object source)
                                              throws java.lang.Exception
Metoda do wykonania porownania dwoch obiektow i wygenerowania listy zmian. Metoda porownuje tylko wartosci pol, ktore dla ktorych ustwiona zostala annotacja Trace. Metoda nie nadaje sie do porownywania zawartosci calych obiektow, chyba ze wszystkie pola zostana oznaczone wczesniej wymieniona annotacja. Jezeli w obiektach wystepuja listy, to aby moc bezblednie je porownac nalezy pamietac o tym, ze w obiektach, ktore beda umieszczone w takiej liscie trzeba dodac annotacje Id przy polu definiujacym unikalny klucz lub przy annotacji podac atrybut 'referencedFieldName', ktore wskażą pole jednoznacznie identyfikujace dany obiekt. Jezeli tego nie zrobimy moga zostać zwrócone nieoczekiwane wyniki.

Parameters:
target - nowa wartosc
source - stara wartosc
Returns:
lista zarejestrowanych zmian
Throws:
java.lang.Exception
See Also:
Id, Trace, ObjectsDifference

diff

public static java.util.List<ObjectsDifference> diff(java.lang.Object target,
                                                     java.lang.Object source,
                                                     java.util.Hashtable<java.lang.String,java.lang.String> labelList)
                                              throws java.lang.Exception
Metoda do wykonania porownania dwoch obiektow i wygenerowania listy zmian. Metoda porownuje tylko wartosci pol, ktore dla ktorych ustwiona zostala annotacja Trace. Metoda nie nadaje sie do porownywania zawartosci calych obiektow, chyba ze wszystkie pola zostana oznaczone wczesniej wymieniona annotacja. Jezeli w obiektach wystepuja listy, to aby moc bezblednie je porownac nalezy pamietac o tym, ze w obiektach, ktore beda umieszczone w takiej liscie trzeba dodac annotacje Id przy polu definiujacym unikalny klucz lub przy annotacji podac atrybut 'referencedFieldName', ktore wskażą pole jednoznacznie identyfikujace dany obiekt. Jezeli tego nie zrobimy moga zostać zwrócone nieoczekiwane wyniki.

Parameters:
target - nowa wartosc
source - stara wartosc
labelList - hashtable z etykietami zmian pol
Returns:
lista zarejestrowanych zmian
Throws:
java.lang.Exception
See Also:
Id, Trace, ObjectsDifference

equals

public static boolean equals(java.lang.Object target,
                             java.lang.Object source)
                      throws java.lang.Exception
Porównanie dwóch obiektów. Metoda porownuje tylko wartosci pol, ktore dla ktorych ustwiona zostala annotacja Trace. Metoda nie nadaje sie do porownywania zawartosci calych obiektow, chyba ze wszystkie pola zostana oznaczone wczesniej wymieniona annotacja. Dodatkowo, ze jej pomoca mozna wstrzyknac dynamiczna liste etykiet. Aby to zadzialalo, oczywiscie trzeba podac odpowiednie parametry annotacji Track. Jezeli w obiektach wystepuja listy, to aby moc bezblednie je porownac nalezy pamietac o tym, ze w obiektach, ktore beda umieszczone w takiej liscie trzeba dodac annotacje Id przy polu definiujacym unikalny klucz lub przy annotacji podac atrybut 'referencedFieldName', ktore wskażą pole jednoznacznie identyfikujace dany obiekt. Jezeli tego nie zrobimy moga zostać zwrócone nieoczekiwane wyniki.

Parameters:
target - nowa wartosc
source - stara wartosc
Returns:
[true|false]
Throws:
java.lang.Exception
See Also:
Id, Trace, ObjectsDifference

getTimeZone

public static java.util.TimeZone getTimeZone()
Returns:
the timeZone

setTimeZone

public static void setTimeZone(java.util.TimeZone timeZone)
Parameters:
timeZone - the timeZone to set


Copyright © 2014 Sci Software. All Rights Reserved.