Revert "Remove mysql and oracle resources for anna-ericsson project"
[anna.git] / example / dbos / workdir / storage / Directory.hpp
diff --git a/example/dbos/workdir/storage/Directory.hpp b/example/dbos/workdir/storage/Directory.hpp
new file mode 100644 (file)
index 0000000..3bffdf3
--- /dev/null
@@ -0,0 +1,93 @@
+// 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 dbos_workdir_storage_Directory_hpp
+#define dbos_workdir_storage_Directory_hpp
+
+#include <anna/dbos/Object.hpp>
+#include <anna/dbos/ObjectFacade.hpp>
+#include <anna/dbos/Loader.hpp>
+
+namespace anna {
+namespace dbms {
+class Database;
+class Connection;
+}
+namespace dbos {
+class Repository;
+}
+}
+
+namespace workdir {
+
+namespace filesystem {
+class Directory;
+}
+
+namespace storage {
+
+using namespace anna;
+
+class Directory : public dbos::Object, public dbos::ObjectFacade <Directory> {
+public:
+  const filesystem::Directory* getFilesystemDirectory() const throw() { return a_filesystemDirectory; }
+  int getINode() const throw() { return a_inode; }
+
+  std::string asString() const throw();
+
+  static void setup(dbos::Repository&, const int maxSize) throw(RuntimeException);
+  static Directory* instantiate(const filesystem::Directory*) throw(RuntimeException);
+
+  static const char* getStorageAreaName() throw() { return "storage::Directory"; }
+  static const dbos::Size getMaxSize() throw() { return st_maxSize; }
+
+private:
+  class Loader : public dbos::Loader {
+  public:
+    Loader() : dbos::Loader() {;}
+
+    Loader& setKey(const filesystem::Directory* directory) throw() {
+      a_filesystemDirectory = directory;
+      return *this;
+    }
+
+    const filesystem::Directory* getDirectory() const throw() { return a_filesystemDirectory; }
+    int getINode() const throw() { return a_inode; }
+
+    dbos::Index getIndex() const throw();
+    std::string asString() const throw();
+
+  private:
+    const filesystem::Directory* a_filesystemDirectory;
+    int a_inode;
+
+    // dbms::Statement is not required
+    dbms::Statement* initialize(dbms::Database&) throw(RuntimeException) { return NULL; }
+    bool load(dbms::Connection*, const dbos::StorageArea*) throw(RuntimeException);
+  };
+
+  const filesystem::Directory* a_filesystemDirectory;
+  int a_inode;
+
+  static Loader* st_loader;
+  static ExclusiveHash <std::string> st_hash;
+  static int st_maxSize;
+
+  Directory() { ; }
+  Directory(const Directory&);
+
+  void initialize(dbos::Loader& loader) throw(RuntimeException, dbms::DatabaseException);
+  void destroy() throw();
+
+  dbos_declare_object(Directory);
+};
+
+}
+}
+
+#endif