Revert "Remove mysql and oracle resources for anna-ericsson project"
[anna.git] / include / anna / dbos / Object.hpp
diff --git a/include/anna/dbos/Object.hpp b/include/anna/dbos/Object.hpp
new file mode 100644 (file)
index 0000000..fc4e38c
--- /dev/null
@@ -0,0 +1,112 @@
+// 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