Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/editor
diff options
context:
space:
mode:
authorArsentiy Milchakov <a.milchakov@corp.mail.ru>2016-08-01 16:47:55 +0300
committerArsentiy Milchakov <a.milchakov@corp.mail.ru>2016-08-09 14:31:23 +0300
commit73994023b9a409878496c9a3ca4aee959c532eb4 (patch)
tree6ac5c981ed8e033226740f4888686a76216296c8 /editor
parent649832fdc7f26414e62c5d5a4ca4cbc9cadde731 (diff)
first group of tests for editor
Diffstat (limited to 'editor')
-rw-r--r--editor/editor.pro2
-rw-r--r--editor/editor_storage.cpp71
-rw-r--r--editor/editor_storage.hpp43
3 files changed, 116 insertions, 0 deletions
diff --git a/editor/editor.pro b/editor/editor.pro
index 79be0528bc..40cc940436 100644
--- a/editor/editor.pro
+++ b/editor/editor.pro
@@ -19,6 +19,7 @@ SOURCES += \
ui2oh.cpp \
user_stats.cpp \
xml_feature.cpp \
+ editor_storage.cpp
HEADERS += \
changeset_wrapper.hpp \
@@ -32,3 +33,4 @@ HEADERS += \
user_stats.hpp \
xml_feature.hpp \
yes_no_unknown.hpp \
+ editor_storage.hpp
diff --git a/editor/editor_storage.cpp b/editor/editor_storage.cpp
new file mode 100644
index 0000000000..96dc771b32
--- /dev/null
+++ b/editor/editor_storage.cpp
@@ -0,0 +1,71 @@
+#include "editor/editor_storage.hpp"
+
+#include "platform/platform.hpp"
+
+#include "coding/internal/file_data.hpp"
+
+#include "base/logging.hpp"
+
+#include "std/string.hpp"
+
+#include "3party/pugixml/src/pugixml.hpp"
+
+using namespace pugi;
+
+namespace
+{
+constexpr char const * kEditorXMLFileName = "edits.xml";
+string GetEditorFilePath() { return GetPlatform().WritablePathForFile(kEditorXMLFileName); }
+} // namespace
+
+namespace editor
+{
+bool StorageLocal::Save(xml_document const & doc)
+{
+ auto const editorFilePath = GetEditorFilePath();
+ return my::WriteToTempAndRenameToFile(editorFilePath, [&doc](string const & fileName) {
+ return doc.save_file(fileName.data(), " ");
+ });
+}
+
+bool StorageLocal::Load(xml_document & doc)
+{
+ auto const editorFilePath = GetEditorFilePath();
+ auto const result = doc.load_file(editorFilePath.c_str());
+ // Note: status_file_not_found is ok if user has never made any edits.
+ if (result != status_ok && result != status_file_not_found)
+ {
+ LOG(LERROR, ("Can't load map edits from disk:", editorFilePath));
+ return false;
+ }
+
+ return true;
+}
+
+void StorageLocal::Reset()
+{
+ my::DeleteFileX(GetEditorFilePath());
+}
+
+
+StorageMemory::StorageMemory()
+ : m_doc(make_unique <xml_document> ())
+{}
+
+bool StorageMemory::Save(xml_document const & doc)
+{
+ m_doc->reset(doc);
+ return true;
+}
+
+bool StorageMemory::Load(xml_document & doc)
+{
+ doc.reset(*m_doc);
+ return true;
+}
+
+void StorageMemory::Reset()
+{
+ m_doc->reset();
+}
+} // namespace editor
diff --git a/editor/editor_storage.hpp b/editor/editor_storage.hpp
new file mode 100644
index 0000000000..d712b6b53c
--- /dev/null
+++ b/editor/editor_storage.hpp
@@ -0,0 +1,43 @@
+#pragma once
+
+#include "std/unique_ptr.hpp"
+
+namespace pugi
+{
+class xml_document;
+}
+
+namespace editor
+{
+// Editor storage interface.
+class StorageBase
+{
+public:
+ virtual ~StorageBase() {}
+ virtual bool Save(pugi::xml_document const & doc) = 0;
+ virtual bool Load(pugi::xml_document & doc) = 0;
+ virtual void Reset() = 0;
+};
+
+// Class which save/load edits to/from local file.
+class StorageLocal : public StorageBase
+{
+public:
+ bool Save(pugi::xml_document const & doc) override;
+ bool Load(pugi::xml_document & doc) override;
+ void Reset() override;
+};
+
+// Class which save/load edits to/from xml_document class instance.
+class StorageMemory : public StorageBase
+{
+public:
+ StorageMemory();
+ bool Save(pugi::xml_document const & doc) override;
+ bool Load(pugi::xml_document & doc) override;
+ void Reset() override;
+
+private:
+ unique_ptr<pugi::xml_document> m_doc;
+};
+}