From 557762a3602b3561568e2e99f27bb8f7e2ceb685 Mon Sep 17 00:00:00 2001 From: "fabian.peller-konrad@kit.edu" <fabian.peller-konrad@kit.edu> Date: Wed, 13 Jan 2021 14:30:10 +0100 Subject: [PATCH] added wrapper around export --- .../armem/ltm/io/DiskWriter/DiskWriter.h | 36 ++++++++---- .../NlohmannJSONDiskWriter.cpp | 4 +- .../NlohmannJSONDiskWriter.h | 4 +- .../datanavigator/AronDataNavigator.h | 55 +++++++++++++++++++ .../datanavigator/AronDictDataNavigator.cpp | 2 + .../datanavigator/AronDictDataNavigator.h | 2 +- .../datanavigator/AronListDataNavigator.cpp | 2 + .../datanavigator/AronListDataNavigator.h | 2 +- .../AronNDArrayDataNavigator.cpp | 2 + .../datanavigator/AronNDArrayDataNavigator.h | 2 +- .../AronPrimitiveDataNavigator.cpp | 2 + .../AronPrimitiveDataNavigator.h | 2 +- 12 files changed, 95 insertions(+), 20 deletions(-) diff --git a/source/RobotAPI/libraries/armem/ltm/io/DiskWriter/DiskWriter.h b/source/RobotAPI/libraries/armem/ltm/io/DiskWriter/DiskWriter.h index ee8485cc9..4cbd3f01a 100644 --- a/source/RobotAPI/libraries/armem/ltm/io/DiskWriter/DiskWriter.h +++ b/source/RobotAPI/libraries/armem/ltm/io/DiskWriter/DiskWriter.h @@ -30,8 +30,8 @@ // ArmarX #include <RobotAPI/interface/aron.h> -#include <RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronDataNavigator.h> -#include <RobotAPI/libraries/aron/aroncore/navigators/typenavigator/AronTypeNavigator.h> +#include <RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronAllDataNavigators.h> +#include <RobotAPI/libraries/aron/aroncore/navigators/typenavigator/AronAllTypeNavigators.h> #include <RobotAPI/libraries/aron/aroncore/io/AronDataIO/LegacyAronDataWriter/LegacyAronDataWriter.h> #include <RobotAPI/libraries/aron/aroncore/io/AronDataIO/AronDataWriter.h> //#include <RobotAPI/libraries/aron/aroncore/io/AronTypeIO/ @@ -62,12 +62,12 @@ namespace armarx::armem DiskWriter(const std::string& r) : rootPath(r) { - if(!std::filesystem::exists(rootPath)) + if (!std::filesystem::exists(rootPath)) { std::filesystem::create_directory(rootPath); } - if(!std::filesystem::is_directory(rootPath)) + if (!std::filesystem::is_directory(rootPath)) { throw LocalException("The Path is not valid. It points to a file instead of a folder!"); } @@ -95,12 +95,13 @@ namespace armarx::armem for (unsigned int i = 0; i < entitySnapshot->instances.size(); ++i) { std::filesystem::path entityElementPath = createEntityElementPath(coreKey, providerKey, entityKey, entityHistoryTimestamp, i); - if(!entityElementPathExists(entityElementPath)) + if (!entityElementPathExists(entityElementPath)) { std::ofstream ofs; ofs.open(entityElementPath); - ofs << getEntityAsString(entitySnapshot->instances[i]); + + ofs << getDataAsString(wrapData(entitySnapshot->instances[i])); ofs.close(); } // check content if file already existent? @@ -113,7 +114,20 @@ namespace armarx::armem } protected: - virtual std::string getEntityAsString(const EntityInstancePtr&) = 0; + aron::datanavigator::AronDictDataNavigatorPtr wrapData(const EntityInstancePtr& e) const + { + aron::datanavigator::AronDictDataNavigatorPtr dataWrapped(new aron::datanavigator::AronDictDataNavigator()); + dataWrapped->addElement("instanceData", e->data()); + + aron::datanavigator::AronLongDataNavigatorPtr timeWrapped(new aron::datanavigator::AronLongDataNavigator()); + timeWrapped->setValue(Time::now().toMilliSeconds()); + dataWrapped->addElement("timeWrapped", timeWrapped); + + // TODO add more metadata + return dataWrapped; + } + + virtual std::string getDataAsString(const aron::datanavigator::AronDictDataNavigatorPtr&) = 0; std::filesystem::path createCoreSegmentPath(const std::string& name) const { @@ -150,7 +164,7 @@ namespace armarx::armem } bool ensureCoreSegmentPathExists(const std::filesystem::path& p) const { - if(!std::filesystem::exists(p)) + if (!std::filesystem::exists(p)) { return std::filesystem::create_directory(p); } @@ -170,7 +184,7 @@ namespace armarx::armem } bool ensureProviderSegmentPathExists(const std::filesystem::path& p) const { - if(!std::filesystem::exists(p)) + if (!std::filesystem::exists(p)) { return std::filesystem::create_directory(p); } @@ -190,7 +204,7 @@ namespace armarx::armem } bool ensureEntityPathExists(const std::filesystem::path& p) const { - if(!std::filesystem::exists(p)) + if (!std::filesystem::exists(p)) { return std::filesystem::create_directory(p); } @@ -210,7 +224,7 @@ namespace armarx::armem } bool ensureTimestampPathExists(const std::filesystem::path& p) const { - if(!std::filesystem::exists(p)) + if (!std::filesystem::exists(p)) { return std::filesystem::create_directory(p); } diff --git a/source/RobotAPI/libraries/armem/ltm/io/DiskWriter/NlohmannJSONDiskWriter/NlohmannJSONDiskWriter.cpp b/source/RobotAPI/libraries/armem/ltm/io/DiskWriter/NlohmannJSONDiskWriter/NlohmannJSONDiskWriter.cpp index 39fc7877e..62ff8d75f 100644 --- a/source/RobotAPI/libraries/armem/ltm/io/DiskWriter/NlohmannJSONDiskWriter/NlohmannJSONDiskWriter.cpp +++ b/source/RobotAPI/libraries/armem/ltm/io/DiskWriter/NlohmannJSONDiskWriter/NlohmannJSONDiskWriter.cpp @@ -8,10 +8,8 @@ namespace armarx::armem::ltm::io { } - std::string NlohmannJSONDiskWriter::getEntityAsString(const EntityInstancePtr& i) + std::string NlohmannJSONDiskWriter::getDataAsString(const aron::datanavigator::AronDictDataNavigatorPtr& aronDataNav) { - const aron::datanavigator::AronDataNavigatorPtr aronDataNav = i->data(); - aron::io::AronDataNlohmannJSONWriter dataWriter; aron::io::LegacyAronDataWriter::SetupWriterFromAronDataPtr(dataWriter, aronDataNav->getResult()); return dataWriter.getResult().dump(4); diff --git a/source/RobotAPI/libraries/armem/ltm/io/DiskWriter/NlohmannJSONDiskWriter/NlohmannJSONDiskWriter.h b/source/RobotAPI/libraries/armem/ltm/io/DiskWriter/NlohmannJSONDiskWriter/NlohmannJSONDiskWriter.h index 1daac1f11..c2c2ed9c4 100644 --- a/source/RobotAPI/libraries/armem/ltm/io/DiskWriter/NlohmannJSONDiskWriter/NlohmannJSONDiskWriter.h +++ b/source/RobotAPI/libraries/armem/ltm/io/DiskWriter/NlohmannJSONDiskWriter/NlohmannJSONDiskWriter.h @@ -42,13 +42,13 @@ namespace armarx::armem typedef std::shared_ptr<NlohmannJSONDiskWriter> NlohmannJSONDiskWriterPtr; class NlohmannJSONDiskWriter : - virtual public DiskWriter + virtual public DiskWriter { public: NlohmannJSONDiskWriter() = delete; NlohmannJSONDiskWriter(const std::string& rootPath); - virtual std::string getEntityAsString(const EntityInstancePtr&) override; + virtual std::string getDataAsString(const aron::datanavigator::AronDictDataNavigatorPtr&) override; }; } } diff --git a/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronDataNavigator.h b/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronDataNavigator.h index c14fede04..08f001f7e 100644 --- a/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronDataNavigator.h +++ b/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronDataNavigator.h @@ -86,6 +86,61 @@ namespace armarx private: static const AronDataNavigatorFactoryPtr FACTORY; }; + + class AronContainerDataNavigator; + typedef std::shared_ptr<AronContainerDataNavigator> AronContainerDataNavigatorPtr; + + class AronContainerDataNavigator : + virtual public AronDataNavigator + { + public: + using PointerType = AronContainerDataNavigatorPtr; + + // constructors + AronContainerDataNavigator() = delete; + AronContainerDataNavigator(const AronDataDescriptor& d, const AronPath& p = AronPath()) : + AronDataNavigator(d, p) + { + + } + }; + + class AronComplexDataNavigator; + typedef std::shared_ptr<AronComplexDataNavigator> AronComplexDataNavigatorPtr; + + class AronComplexDataNavigator : + virtual public AronDataNavigator + { + public: + using PointerType = AronComplexDataNavigatorPtr; + + // constructors + AronComplexDataNavigator() = delete; + AronComplexDataNavigator(const AronDataDescriptor& d, const AronPath& p = AronPath()) : + AronDataNavigator(d, p) + { + + } + }; + + class AronPrimitiveDataNavigator; + typedef std::shared_ptr<AronPrimitiveDataNavigator> AronPrimitiveDataNavigatorPtr; + + class AronPrimitiveDataNavigator : + virtual public AronDataNavigator + { + public: + using PointerType = AronPrimitiveDataNavigatorPtr; + + // constructors + AronPrimitiveDataNavigator() = delete; + AronPrimitiveDataNavigator(const AronDataDescriptor& d, const AronPath& p = AronPath()) : + AronDataNavigator(d, p) + { + + } + }; + } } } diff --git a/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronDictDataNavigator.cpp b/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronDictDataNavigator.cpp index b72d694a4..43f756bba 100644 --- a/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronDictDataNavigator.cpp +++ b/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronDictDataNavigator.cpp @@ -40,6 +40,7 @@ namespace armarx AronDictDataNavigator::AronDictDataNavigator(const data::AronDictPtr& o, const AronPath& path) : AronNavigator<AronDataDescriptor, data::AronData>::AronNavigator(AronDataDescriptor::eAronDict, path), AronDataNavigator(AronDataDescriptor::eAronDict, path), + AronContainerDataNavigator(AronDataDescriptor::eAronDict, path), aron(o) { CheckAronPtrForNull("AronDictDataNavigator", "AronDictDataNavigator", getPath(), aron); @@ -53,6 +54,7 @@ namespace armarx AronDictDataNavigator::AronDictDataNavigator(const AronPath& path) : AronNavigator<AronDataDescriptor, data::AronData>::AronNavigator(AronDataDescriptor::eAronDict, path), AronDataNavigator(AronDataDescriptor::eAronDict, path), + AronContainerDataNavigator(AronDataDescriptor::eAronDict, path), aron(new data::AronDict()) { } diff --git a/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronDictDataNavigator.h b/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronDictDataNavigator.h index 3b1124c4c..287718efe 100644 --- a/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronDictDataNavigator.h +++ b/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronDictDataNavigator.h @@ -42,7 +42,7 @@ namespace armarx typedef std::shared_ptr<AronDictDataNavigator> AronDictDataNavigatorPtr; class AronDictDataNavigator : - virtual public AronDataNavigator + virtual public AronContainerDataNavigator { public: using PointerType = AronDictDataNavigatorPtr; diff --git a/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronListDataNavigator.cpp b/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronListDataNavigator.cpp index c57bea07f..63e084008 100644 --- a/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronListDataNavigator.cpp +++ b/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronListDataNavigator.cpp @@ -39,6 +39,7 @@ namespace armarx AronListDataNavigator::AronListDataNavigator(const data::AronListPtr& l, const AronPath& path) : AronNavigator<AronDataDescriptor, data::AronData>::AronNavigator(AronDataDescriptor::eAronList, path), AronDataNavigator(AronDataDescriptor::eAronList, path), + AronContainerDataNavigator(AronDataDescriptor::eAronList, path), aron(l) { CheckAronPtrForNull("AronListDataNavigator", "AronListDataNavigator", getPath(), aron); @@ -53,6 +54,7 @@ namespace armarx AronListDataNavigator::AronListDataNavigator(const AronPath& path) : AronNavigator<AronDataDescriptor, data::AronData>::AronNavigator(AronDataDescriptor::eAronList, path), AronDataNavigator(AronDataDescriptor::eAronList, path), + AronContainerDataNavigator(AronDataDescriptor::eAronList, path), aron(new data::AronList()) { } diff --git a/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronListDataNavigator.h b/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronListDataNavigator.h index 87b0b00d6..2a7ea718f 100644 --- a/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronListDataNavigator.h +++ b/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronListDataNavigator.h @@ -41,7 +41,7 @@ namespace armarx typedef std::shared_ptr<AronListDataNavigator> AronListDataNavigatorPtr; class AronListDataNavigator : - virtual public AronDataNavigator + virtual public AronContainerDataNavigator { public: using PointerType = AronListDataNavigatorPtr; diff --git a/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronNDArrayDataNavigator.cpp b/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronNDArrayDataNavigator.cpp index bd252a0d7..5c748218f 100644 --- a/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronNDArrayDataNavigator.cpp +++ b/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronNDArrayDataNavigator.cpp @@ -42,6 +42,7 @@ namespace armarx AronNDArrayDataNavigator::AronNDArrayDataNavigator(const data::AronNDArrayPtr& o, const AronPath& path) : AronNavigator<AronDataDescriptor, data::AronData>::AronNavigator(AronDataDescriptor::eAronNDArray, path), AronDataNavigator(AronDataDescriptor::eAronNDArray, path), + AronComplexDataNavigator(AronDataDescriptor::eAronNDArray, path), aron(o) { CheckAronPtrForNull("AronNDArrayDataNavigator", "AronNDArrayDataNavigator", getPath(), aron); @@ -50,6 +51,7 @@ namespace armarx AronNDArrayDataNavigator::AronNDArrayDataNavigator(const AronPath& path) : AronNavigator<AronDataDescriptor, data::AronData>::AronNavigator(AronDataDescriptor::eAronNDArray, path), AronDataNavigator(AronDataDescriptor::eAronNDArray, path), + AronComplexDataNavigator(AronDataDescriptor::eAronNDArray, path), aron(new data::AronNDArray()) { diff --git a/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronNDArrayDataNavigator.h b/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronNDArrayDataNavigator.h index 96a88acf3..3a32dd987 100644 --- a/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronNDArrayDataNavigator.h +++ b/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronNDArrayDataNavigator.h @@ -41,7 +41,7 @@ namespace armarx typedef std::shared_ptr<AronNDArrayDataNavigator> AronNDArrayDataNavigatorPtr; class AronNDArrayDataNavigator : - virtual public AronDataNavigator + virtual public AronComplexDataNavigator { public: using PointerType = AronNDArrayDataNavigatorPtr; diff --git a/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronPrimitiveDataNavigator.cpp b/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronPrimitiveDataNavigator.cpp index 66b98dcbc..a1c14461a 100644 --- a/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronPrimitiveDataNavigator.cpp +++ b/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronPrimitiveDataNavigator.cpp @@ -38,6 +38,7 @@ namespace armarx Aron##upperType##DataNavigator::Aron##upperType##DataNavigator(const AronPath& path) : \ AronNavigator<AronDataDescriptor, data::AronData>::AronNavigator(AronDataDescriptor::eAron##upperType, path), \ AronDataNavigator(AronDataDescriptor::eAron##upperType, path), \ + AronPrimitiveDataNavigator(AronDataDescriptor::eAron##upperType, path), \ aron(new data::Aron##upperType()) \ { \ aron->value = {}; \ @@ -45,6 +46,7 @@ namespace armarx Aron##upperType##DataNavigator::Aron##upperType##DataNavigator(const data::Aron##upperType##Ptr& o, const AronPath& path) : \ AronNavigator<AronDataDescriptor, data::AronData>::AronNavigator(AronDataDescriptor::eAron##upperType, path), \ AronDataNavigator(AronDataDescriptor::eAron##upperType, path), \ + AronPrimitiveDataNavigator(AronDataDescriptor::eAron##upperType, path), \ aron(o) \ { \ } \ diff --git a/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronPrimitiveDataNavigator.h b/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronPrimitiveDataNavigator.h index 10f9fe6dc..2dc5f7a58 100644 --- a/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronPrimitiveDataNavigator.h +++ b/source/RobotAPI/libraries/aron/aroncore/navigators/datanavigator/AronPrimitiveDataNavigator.h @@ -42,7 +42,7 @@ namespace armarx typedef std::shared_ptr<Aron##upperType##DataNavigator> Aron##upperType##DataNavigatorPtr; \ \ class Aron##upperType##DataNavigator : \ - virtual public AronDataNavigator \ + virtual public AronPrimitiveDataNavigator \ { \ public: \ using PointerType = Aron##upperType##DataNavigatorPtr; \ -- GitLab