--- /dev/null
+// ANNA - Anna is Not Nothingness Anymore //
+// //
+// (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
+// //
+// See project site at http://redmine.teslayout.com/projects/anna-suite //
+// See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
+
+
+#ifndef anna_dbos_Object_hpp
+#define anna_dbos_Object_hpp
+
+#include <anna/core/RuntimeException.hpp>
+
+#include <anna/dbms/DatabaseException.hpp>
+
+#include <anna/dbos/Loader.hpp>
+
+namespace anna {
+
+namespace dbos {
+
+class Creator;
+
+/**
+ Interfaz que deben cumplir los objetos persistentes.
+
+ Ejemplo de definicion de una clase usando esta interfaz:
+
+ \include dbos_demo.p/oodb.d/hdrs/dbos_demo.oodb.Table01.h
+
+ Ejemplo de implementacion de la clase correspondiente a la definicion:
+
+ \include dbos_demo.p/oodb.d/oodb.Table01.cc
+*/
+class Object {
+public:
+ /**
+ Devuelve el indice asociado a este objeto
+ \return el indice asociado a este objeto
+ */
+ Index getIndex() const throw() { return a_index; }
+
+ /**
+ * Devuelve \em true si este objeto ya existe en el medio físico (fué cargado desde allí o fue creado y grabado posteriormente) o
+ * \em false si este objeto sólo existe en la memoria intermedia.
+ * \return \em true si este objeto ya existe en el medio físico (fué cargado desde allí o fue creado y grabado posteriormente) o
+ * \em false si este objeto sólo existe en la memoria intermedia.
+ */
+ bool isStored() const throw() { return a_isStored; }
+
+protected:
+ /**
+ Constructor.
+ */
+ Object() : a_index(0), a_isStored(false) {;}
+
+ /**
+ Inicializa este objeto con la informacion obtenida desde el medio fisico donde
+ esta grabado el objeto. Normalmente este medio fisico correspondera con una base de datos.
+
+ \param loader Cargador que contiene la informacion con la que debemos inicializar este objeto.
+
+ */
+ virtual void initialize(Loader& loader) throw(RuntimeException, dbms::DatabaseException) = 0;
+
+ /**
+ Actualiza la informacion de este objeto con la nueva informacion obtenida del medio
+ fisico.
+ \param creator Creador que contiene la informacion con la que debemos inicializar este objeto.
+ */
+ virtual void create(Creator& creator) throw(RuntimeException, dbms::DatabaseException) {;}
+
+ /**
+ Libera los recursos reservados por este objeto. Este metodo solo se invocara cuando el objeto
+ vaya a ser sacado definitivamente del area de almacenamiento.
+ */
+ virtual void destroy() throw() {;}
+
+ /**
+ Devuelve \em true si el registro del medio fisico ha cambiado respecto al registro
+ cargado en memoria o \em false en otro caso.
+
+ \param loader Cargador que contiene la informacion con la que deberiamos re-inicializar
+ este objeto.
+
+ \return \em true si el registro del medio fisico ha cambiado respecto al registro
+ cargado en memoria o \em false en otro caso.
+ */
+ virtual bool hasChanges(Loader& loader) throw(RuntimeException, dbms::DatabaseException) {
+ return true;
+ }
+
+ /**
+ Devuelve \em true si el objeto requiere comenzar el proceso de comprobacion de recarga
+ de datos \em false en otro caso.
+ */
+ virtual bool enableUpdate() const throw() { return true; }
+
+private:
+ Index a_index;
+ bool a_isStored;
+
+ void setIndex(const Index index) throw() { a_index = index; }
+
+ friend class StorageArea;
+};
+
+
+}
+}
+
+#endif