From 3f74243813fd6a0cdbbe96e5f1301f51c087a482 Mon Sep 17 00:00:00 2001 From: Hunaid Hameed Date: Mon, 22 May 2023 13:13:08 +0200 Subject: [PATCH] make version number optional to ensure compatibility with legacy files --- .../include/seerep_hdf5_core/hdf5_core_general.h | 2 +- .../seerep_hdf5_core/src/hdf5_core_general.cpp | 11 +++++++---- seerep_srv/seerep_core/src/core_project.cpp | 12 +++++++++--- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/seerep_hdf5/seerep_hdf5_core/include/seerep_hdf5_core/hdf5_core_general.h b/seerep_hdf5/seerep_hdf5_core/include/seerep_hdf5_core/hdf5_core_general.h index ae4d02bc3..7308850f7 100644 --- a/seerep_hdf5/seerep_hdf5_core/include/seerep_hdf5_core/hdf5_core_general.h +++ b/seerep_hdf5/seerep_hdf5_core/include/seerep_hdf5_core/hdf5_core_general.h @@ -161,7 +161,7 @@ class Hdf5CoreGeneral std::string readProjectFrameId(); void writeVersion(const std::string& version); - const std::string readVersion(); + const std::optional readVersion(); // ################ // Geodetic Coordinates diff --git a/seerep_hdf5/seerep_hdf5_core/src/hdf5_core_general.cpp b/seerep_hdf5/seerep_hdf5_core/src/hdf5_core_general.cpp index ea375a7f5..811e1d29d 100644 --- a/seerep_hdf5/seerep_hdf5_core/src/hdf5_core_general.cpp +++ b/seerep_hdf5/seerep_hdf5_core/src/hdf5_core_general.cpp @@ -109,19 +109,22 @@ void Hdf5CoreGeneral::writeVersion(const std::string& version) } m_file->flush(); } -const std::string Hdf5CoreGeneral::readVersion() + +const std::optional Hdf5CoreGeneral::readVersion() { const std::scoped_lock lock(*m_write_mtx); std::string version; try { - m_file->getAttribute(VERSION).read(version); + version = readAttributeFromHdf5(m_file->getName(), *m_file, VERSION); } - catch (...) + catch (const std::exception& e) { - throw std::runtime_error("Project " + m_file->getName() + " has no version defined."); + BOOST_LOG_SEV(m_logger, boost::log::trivial::severity_level::warning) << e.what(); + return std::nullopt; } + return version; } diff --git a/seerep_srv/seerep_core/src/core_project.cpp b/seerep_srv/seerep_core/src/core_project.cpp index 5d53577c8..bdc82e810 100644 --- a/seerep_srv/seerep_core/src/core_project.cpp +++ b/seerep_srv/seerep_core/src/core_project.cpp @@ -8,17 +8,23 @@ CoreProject::CoreProject(const boost::uuids::uuid& uuid, const std::string path) m_projectname = m_ioGeneral->readProjectname(); m_frameId = m_ioGeneral->readProjectFrameId(); - m_version = m_ioGeneral->readVersion(); - /// TODO use the advantages of std::optional + + /* get optional class members */ auto geodeticCoordinates = m_ioGeneral->readGeodeticLocation(); + auto version = m_ioGeneral->readVersion(); + + if (version) + { + m_version = version.value(); + } if (geodeticCoordinates) { m_geodeticCoordinates = geodeticCoordinates.value(); } - recreateDatatypes(); } + CoreProject::CoreProject(const boost::uuids::uuid& uuid, const std::string path, const std::string projectname, const std::string mapFrameId, const seerep_core_msgs::GeodeticCoordinates geodeticCoords, const std::string version)