1 {** Es una clase abstracta para hacer persistente un objeto.
\r
2 Básicamente provee métodos para serialización.<br>
\r
5 Es importante que el ID del objeto sea el primer atributo en la
\r
6 serialización, de otra manera puede ser malinterpretado al des-
\r
8 El orden del resto de los atributos deben ser respetados también.
\r
9 Aunque es bastante probable que fucione si están en otro órden,
\r
10 no está 100% asegurado y si se hace en otro orden los resultados
\r
11 pueden ser inesperados o pueden surgir errores.
\r
13 unit ObjetoPersistente;
\r
18 {$IFDEF DebugAlgoWars}
\r
24 {** Excepcion producida si hay un error al serializar.}
\r
25 ESerializacion = class( Exception )
\r
28 {** Es una clase abstracta para hacer persistente un objeto.
\r
29 Básicamente provee métodos para serialización.
\r
30 NOTA: Es importante que el ID del objeto sea el primer atributo en la
\r
31 serialización, de otra manera puede ser malinterpretado al des-
\r
33 cObjetoPersistente = class{$IFDEF DebugAlgoWars}( cObjeto ){$ENDIF}
\r
35 aID: string; // Identificación UNICA de la instancia
\r
37 {** Setea la identificacion del objeto}
\r
38 procedure mSetID( id: string );
\r
40 {** Constructor. Setea el ID.}
\r
42 {** Constructor que crea el objeto a partir de una cadena de texto con
\r
43 el objeto serializado.}
\r
44 constructor crearDeSerializado( str: string );
\r
45 {** Obtiene la identificacion del objeto}
\r
46 function mGetID: string;
\r
47 {** Devuelve una cadena de texto con el objeto serializado.}
\r
48 function mSerializar: string; virtual;
\r
49 {** Recrea el objeto a partir de una cadena de texto con el objeto
\r
51 procedure mDesSerializar( str: string ); virtual;
\r
59 { cObjetoPersistente }
\r
61 {** Constructor que crea el objeto a partir de una cadena de texto con
\r
62 el objeto serializado.
\r
63 @param str cadena de texto con el objeto serializado.}
\r
64 constructor cObjetoPersistente.crearDeSerializado(str: string);
\r
66 inherited create; // Llama al create padre
\r
67 mDesSerializar( str ); // Deserializa los datos
\r
70 {** Constructor. Setea el ID.}
\r
71 constructor cObjetoPersistente.create;
\r
74 aID := IntToHex( integer( self ), 6 );
\r
77 {** Obtiene la identificacion del objeto
\r
78 @return ID del objeto.}
\r
79 function cObjetoPersistente.mGetID: string;
\r
84 {** Setea la identificacion del objeto
\r
85 @param id nuevo ID.}
\r
86 procedure cObjetoPersistente.mSetID(id: string);
\r
91 {** Devuelve una cadena de texto con el objeto serializado.
\r
92 @return Cadena de texto con el objeto serializado.}
\r
93 function cObjetoPersistente.mSerializar: string;
\r
95 result := '<id>' + aID + '</id>';
\r
98 {** Recrea el objeto a partir de una cadena de texto con el objeto
\r
100 @param str Cadena de texto con el objeto serializado.}
\r
101 procedure cObjetoPersistente.mDesSerializar(str: string);
\r
105 r := TRegExpr.create;
\r
106 try // prueba que no haya errores con las expresiones regulares
\r
107 r.Expression := '<id>\s*([ABCDEFabcdef0-9]{6})\s*</id>';
\r
108 if r.Exec ( str ) then
\r
111 raise ESerializacion.create( 'No se encontro el ID del Objeto' );
\r
113 on e: ERegExpr do begin
\r
115 raise ESerializacion.create( ClassName + ': Error al extraer el ID utilizando expresiones regulares: ' + e.Message );
\r