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)