data: saving and loading Storage with sqlite file next to project file

This commit is contained in:
Eberhard Graether
2015-09-17 12:08:25 +02:00
parent f702b79892
commit a14bfaff56
12 changed files with 37 additions and 33 deletions
+18 -10
View File
@@ -14,7 +14,6 @@
std::shared_ptr<Project> Project::create(StorageAccessProxy* storageAccessProxy) std::shared_ptr<Project> Project::create(StorageAccessProxy* storageAccessProxy)
{ {
std::shared_ptr<Project> ptr(new Project(storageAccessProxy)); std::shared_ptr<Project> ptr(new Project(storageAccessProxy));
ptr->clearStorage();
return ptr; return ptr;
} }
@@ -27,7 +26,7 @@ bool Project::loadProjectSettings(const FilePath& projectSettingsFile)
bool success = ProjectSettings::getInstance()->load(projectSettingsFile); bool success = ProjectSettings::getInstance()->load(projectSettingsFile);
if (success) if (success)
{ {
m_projectSettingsFilepath = projectSettingsFile; setProjectSettingsFilePath(projectSettingsFile);
//m_fileManager.reset(); //m_fileManager.reset();
updateFileManager(); updateFileManager();
@@ -39,7 +38,7 @@ bool Project::saveProjectSettings(const FilePath& projectSettingsFile)
{ {
if (!projectSettingsFile.empty()) if (!projectSettingsFile.empty())
{ {
m_projectSettingsFilepath = projectSettingsFile; setProjectSettingsFilePath(projectSettingsFile);
} }
if (m_projectSettingsFilepath.empty()) if (m_projectSettingsFilepath.empty())
@@ -56,7 +55,7 @@ bool Project::saveProjectSettings(const FilePath& projectSettingsFile)
void Project::clearProjectSettings() void Project::clearProjectSettings()
{ {
m_projectSettingsFilepath = FilePath(); setProjectSettingsFilePath(FilePath());
ProjectSettings::getInstance()->clear(); ProjectSettings::getInstance()->clear();
//m_fileManager.reset(); //m_fileManager.reset();
@@ -71,12 +70,6 @@ void Project::reloadProjectSettings()
} }
} }
void Project::clearStorage()
{
m_storage = std::make_shared<Storage>();
m_storageAccessProxy->setSubject(m_storage.get());
}
void Project::parseCode() void Project::parseCode()
{ {
if (m_projectSettingsFilepath.empty()) if (m_projectSettingsFilepath.empty())
@@ -124,6 +117,21 @@ void Project::logStats() const
m_storage->logStats(); m_storage->logStats();
} }
void Project::setProjectSettingsFilePath(const FilePath& path)
{
if (path.empty())
{
m_storage.reset();
}
else if (m_projectSettingsFilepath != path)
{
m_storage = std::make_shared<Storage>(FilePath(path).replaceExtension("sqlite"));
}
m_storageAccessProxy->setSubject(m_storage.get());
m_projectSettingsFilepath = path;
}
void Project::updateFileManager() void Project::updateFileManager()
{ {
std::shared_ptr<ProjectSettings> projSettings = ProjectSettings::getInstance(); std::shared_ptr<ProjectSettings> projSettings = ProjectSettings::getInstance();
+2 -1
View File
@@ -19,10 +19,10 @@ public:
bool loadProjectSettings(const FilePath& projectSettingsFile); bool loadProjectSettings(const FilePath& projectSettingsFile);
bool saveProjectSettings(const FilePath& projectSettingsFile); bool saveProjectSettings(const FilePath& projectSettingsFile);
void clearProjectSettings(); void clearProjectSettings();
void reloadProjectSettings(); void reloadProjectSettings();
void clearStorage();
void parseCode(); void parseCode();
void logStats() const; void logStats() const;
@@ -32,6 +32,7 @@ private:
Project(const Project&); Project(const Project&);
Project operator=(const Project&); Project operator=(const Project&);
void setProjectSettingsFilePath(const FilePath& path);
void updateFileManager(); void updateFileManager();
Parser::Arguments getParserArguments() const; Parser::Arguments getParserArguments() const;
@@ -47,11 +47,6 @@ void GraphController::handleMessage(MessageActivateTokens* message)
buildGraph(message); buildGraph(message);
} }
void GraphController::handleMessage(MessageFinishedParsing* message)
{
getView()->clear();
}
void GraphController::handleMessage(MessageFlushUpdates* message) void GraphController::handleMessage(MessageFlushUpdates* message)
{ {
buildGraph(message); buildGraph(message);
@@ -5,7 +5,6 @@
#include "utility/messaging/MessageListener.h" #include "utility/messaging/MessageListener.h"
#include "utility/messaging/type/MessageActivateTokens.h" #include "utility/messaging/type/MessageActivateTokens.h"
#include "utility/messaging/type/MessageFinishedParsing.h"
#include "utility/messaging/type/MessageFlushUpdates.h" #include "utility/messaging/type/MessageFlushUpdates.h"
#include "utility/messaging/type/MessageFocusIn.h" #include "utility/messaging/type/MessageFocusIn.h"
#include "utility/messaging/type/MessageFocusOut.h" #include "utility/messaging/type/MessageFocusOut.h"
@@ -28,7 +27,6 @@ class StorageAccess;
class GraphController class GraphController
: public Controller : public Controller
, public MessageListener<MessageActivateTokens> , public MessageListener<MessageActivateTokens>
, public MessageListener<MessageFinishedParsing>
, public MessageListener<MessageFlushUpdates> , public MessageListener<MessageFlushUpdates>
, public MessageListener<MessageFocusIn> , public MessageListener<MessageFocusIn>
, public MessageListener<MessageFocusOut> , public MessageListener<MessageFocusOut>
@@ -42,7 +40,6 @@ public:
private: private:
virtual void handleMessage(MessageActivateTokens* message); virtual void handleMessage(MessageActivateTokens* message);
virtual void handleMessage(MessageFinishedParsing* message);
virtual void handleMessage(MessageFlushUpdates* message); virtual void handleMessage(MessageFlushUpdates* message);
virtual void handleMessage(MessageFocusIn* message); virtual void handleMessage(MessageFocusIn* message);
virtual void handleMessage(MessageFocusOut* message); virtual void handleMessage(MessageFocusOut* message);
@@ -55,11 +55,6 @@ void SearchController::handleMessage(MessageFind* message)
getView()->setFocus(); getView()->setFocus();
} }
void SearchController::handleMessage(MessageFinishedParsing* message)
{
getView()->setMatches(std::vector<SearchMatch>());
}
void SearchController::handleMessage(MessageSearch* message) void SearchController::handleMessage(MessageSearch* message)
{ {
getView()->setMatches(message->getMatches()); getView()->setMatches(message->getMatches());
@@ -9,7 +9,6 @@
#include "utility/messaging/type/MessageActivateFile.h" #include "utility/messaging/type/MessageActivateFile.h"
#include "utility/messaging/type/MessageActivateNodes.h" #include "utility/messaging/type/MessageActivateNodes.h"
#include "utility/messaging/type/MessageFind.h" #include "utility/messaging/type/MessageFind.h"
#include "utility/messaging/type/MessageFinishedParsing.h"
#include "utility/messaging/type/MessageSearch.h" #include "utility/messaging/type/MessageSearch.h"
#include "utility/messaging/type/MessageSearchAutocomplete.h" #include "utility/messaging/type/MessageSearchAutocomplete.h"
@@ -22,7 +21,6 @@ class SearchController
, public MessageListener<MessageActivateFile> , public MessageListener<MessageActivateFile>
, public MessageListener<MessageActivateNodes> , public MessageListener<MessageActivateNodes>
, public MessageListener<MessageFind> , public MessageListener<MessageFind>
, public MessageListener<MessageFinishedParsing>
, public MessageListener<MessageSearch> , public MessageListener<MessageSearch>
, public MessageListener<MessageSearchAutocomplete> , public MessageListener<MessageSearchAutocomplete>
{ {
@@ -35,7 +33,6 @@ private:
virtual void handleMessage(MessageActivateFile* message); virtual void handleMessage(MessageActivateFile* message);
virtual void handleMessage(MessageActivateNodes* message); virtual void handleMessage(MessageActivateNodes* message);
virtual void handleMessage(MessageFind* message); virtual void handleMessage(MessageFind* message);
virtual void handleMessage(MessageFinishedParsing* message);
virtual void handleMessage(MessageSearch* message); virtual void handleMessage(MessageSearch* message);
virtual void handleMessage(MessageSearchAutocomplete* message); virtual void handleMessage(MessageSearchAutocomplete* message);
+7 -3
View File
@@ -7,7 +7,7 @@
SqliteStorage::SqliteStorage(const std::string& dbFilePath) SqliteStorage::SqliteStorage(const std::string& dbFilePath)
{ {
m_database.open(dbFilePath.c_str()); m_database.open(dbFilePath.c_str());
clear(); setup();
} }
SqliteStorage::~SqliteStorage() SqliteStorage::~SqliteStorage()
@@ -15,12 +15,16 @@ SqliteStorage::~SqliteStorage()
m_database.close(); m_database.close();
} }
void SqliteStorage::setup()
{
m_database.execDML("PRAGMA foreign_keys=ON;");
setupTables();
}
void SqliteStorage::clear() void SqliteStorage::clear()
{ {
m_database.execDML("PRAGMA foreign_keys=OFF;"); m_database.execDML("PRAGMA foreign_keys=OFF;");
clearTables(); clearTables();
m_database.execDML("PRAGMA foreign_keys=ON;");
setupTables();
} }
void SqliteStorage::beginTransaction() void SqliteStorage::beginTransaction()
+1
View File
@@ -20,6 +20,7 @@ public:
SqliteStorage(const std::string& dbFilePath); SqliteStorage(const std::string& dbFilePath);
~SqliteStorage(); ~SqliteStorage();
void setup();
void clear(); void clear();
void beginTransaction(); void beginTransaction();
+2 -2
View File
@@ -21,8 +21,8 @@
#include "data/type/DataType.h" #include "data/type/DataType.h"
#include "settings/ApplicationSettings.h" #include "settings/ApplicationSettings.h"
Storage::Storage() Storage::Storage(const FilePath& dbPath)
: m_sqliteStorage("data/test.sqlite") : m_sqliteStorage(dbPath.str())
{ {
} }
+1 -1
View File
@@ -19,7 +19,7 @@ class Storage
, public StorageAccess , public StorageAccess
{ {
public: public:
Storage(); Storage(const FilePath& dbPath);
virtual ~Storage(); virtual ~Storage();
void clear(); void clear();
+5
View File
@@ -135,6 +135,11 @@ FilePath FilePath::withoutExtension() const
return FilePath(boost::filesystem::path(m_path).replace_extension()); return FilePath(boost::filesystem::path(m_path).replace_extension());
} }
FilePath FilePath::replaceExtension(const std::string& extension)
{
return FilePath(boost::filesystem::path(m_path).replace_extension(extension));
}
bool FilePath::hasExtension(const std::vector<std::string>& extensions) const bool FilePath::hasExtension(const std::vector<std::string>& extensions) const
{ {
std::string e = extension(); std::string e = extension();
+1
View File
@@ -32,6 +32,7 @@ public:
std::string extension() const; std::string extension() const;
FilePath withoutExtension() const; FilePath withoutExtension() const;
FilePath replaceExtension(const std::string& extension);
bool hasExtension(const std::vector<std::string>& extensions) const; bool hasExtension(const std::vector<std::string>& extensions) const;
bool operator==(const FilePath& other) const; bool operator==(const FilePath& other) const;