From cf42fbd74ea6de3789fa215e8ca08f7283770873 Mon Sep 17 00:00:00 2001 From: Jessica Marquis Date: Thu, 14 Mar 2024 15:18:29 -0400 Subject: [PATCH] Add support for getting the pipeline json object from a dream3d file --- src/simplnx/Pipeline/Pipeline.cpp | 1 - src/simplnx/Pipeline/Pipeline.hpp | 1 + .../Utilities/Parsing/DREAM3D/Dream3dIO.cpp | 41 +++++++++++++++++-- .../Utilities/Parsing/DREAM3D/Dream3dIO.hpp | 17 ++++++++ 4 files changed, 55 insertions(+), 5 deletions(-) diff --git a/src/simplnx/Pipeline/Pipeline.cpp b/src/simplnx/Pipeline/Pipeline.cpp index 53049a2aa4..bb08ab6e6b 100644 --- a/src/simplnx/Pipeline/Pipeline.cpp +++ b/src/simplnx/Pipeline/Pipeline.cpp @@ -24,7 +24,6 @@ constexpr StringLiteral k_PipelineItemsKey = "pipeline"; constexpr StringLiteral k_PipelineVersionKey = "version"; constexpr uint64 k_PipelineVersion = 1; -constexpr StringLiteral k_SIMPLPipelineBuilderKey = "PipelineBuilder"; constexpr StringLiteral k_SIMPLPipelineNameKey = "Name"; constexpr StringLiteral k_SIMPLNumFilterseKey = "Number_Filters"; diff --git a/src/simplnx/Pipeline/Pipeline.hpp b/src/simplnx/Pipeline/Pipeline.hpp index 0b926b6fa1..0ab8288ad9 100644 --- a/src/simplnx/Pipeline/Pipeline.hpp +++ b/src/simplnx/Pipeline/Pipeline.hpp @@ -33,6 +33,7 @@ class SIMPLNX_EXPORT Pipeline : public AbstractPipelineNode, protected PipelineN using const_iterator = collection_type::const_iterator; static constexpr StringLiteral k_Extension = ".d3dpipeline"; + static constexpr StringLiteral k_SIMPLPipelineBuilderKey = "PipelineBuilder"; /** * @brief Constructs a Pipeline from json. diff --git a/src/simplnx/Utilities/Parsing/DREAM3D/Dream3dIO.cpp b/src/simplnx/Utilities/Parsing/DREAM3D/Dream3dIO.cpp index a0bad1307e..b26146d931 100644 --- a/src/simplnx/Utilities/Parsing/DREAM3D/Dream3dIO.cpp +++ b/src/simplnx/Utilities/Parsing/DREAM3D/Dream3dIO.cpp @@ -1331,21 +1331,39 @@ Result DREAM3D::ImportDataStructureFromFile(const std::filesystem Result DREAM3D::ImportPipelineFromFile(const nx::core::HDF5::FileReader& fileReader) { - if(GetPipelineVersion(fileReader) != k_CurrentPipelineVersion) + Result pipelineJson = ImportPipelineJsonFromFile(fileReader); + if(pipelineJson.invalid()) { - return MakeErrorResult(k_InvalidPipelineVersion, fmt::format("Could not parse Pipeline version '{}'. Expected version: '{}'", GetPipelineVersion(fileReader), k_CurrentFileVersion)); + return ConvertInvalidResult(std::move(pipelineJson)); } + const auto fileVersion = GetFileVersion(fileReader); + if(fileVersion == k_CurrentFileVersion) + { + if(GetPipelineVersion(fileReader) != k_CurrentPipelineVersion) + { + return MakeErrorResult(k_InvalidPipelineVersion, fmt::format("Could not parse Pipeline version '{}'. Expected version: '{}'", GetPipelineVersion(fileReader), k_CurrentFileVersion)); + } + return Pipeline::FromJson(pipelineJson.value()); + } + if(fileVersion == Legacy::FileVersion) + { + return Pipeline::FromSIMPLJson(pipelineJson.value()); + } + return MakeErrorResult(k_InvalidPipelineVersion, fmt::format("Could not parse file version '{}'", k_CurrentFileVersion)); +} +Result DREAM3D::ImportPipelineJsonFromFile(const nx::core::HDF5::FileReader& fileReader) +{ auto pipelineGroupReader = fileReader.openGroup(k_PipelineJsonTag); auto pipelineDatasetReader = pipelineGroupReader.openDataset(k_PipelineJsonTag); if(!pipelineDatasetReader.isValid()) { - return MakeErrorResult(k_PipelineGroupUnavailable, "Could not open '/Pipeline' HDF5 Group."); + return MakeErrorResult(k_PipelineGroupUnavailable, "Could not open '/Pipeline' HDF5 Group."); } auto pipelineJsonString = pipelineDatasetReader.readAsString(); auto pipelineJson = nlohmann::json::parse(pipelineJsonString); - return Pipeline::FromJson(pipelineJson); + return {pipelineJson}; } Result DREAM3D::ImportPipelineFromFile(const std::filesystem::path& filePath) @@ -1363,6 +1381,21 @@ Result DREAM3D::ImportPipelineFromFile(const std::filesystem::path& fi return ImportPipelineFromFile(fileReader); } +Result DREAM3D::ImportPipelineJsonFromFile(const std::filesystem::path& filePath) +{ + if(!std::filesystem::exists(filePath)) + { + return MakeErrorResult(-1, fmt::format("DREAM3D::ImportPipelineFromFile: File does not exist. '{}'", filePath.string())); + } + nx::core::HDF5::FileReader fileReader(filePath); + if(!fileReader.isValid()) + { + return MakeErrorResult(-1, fmt::format("DREAM3D::ImportPipelineFromFile: Unable to open '{}' for reading", filePath.string())); + } + + return ImportPipelineJsonFromFile(fileReader); +} + Result DREAM3D::ReadFile(const nx::core::HDF5::FileReader& fileReader, bool preflight) { // Pipeline pipeline; diff --git a/src/simplnx/Utilities/Parsing/DREAM3D/Dream3dIO.hpp b/src/simplnx/Utilities/Parsing/DREAM3D/Dream3dIO.hpp index c0f576cfa5..9238335e36 100644 --- a/src/simplnx/Utilities/Parsing/DREAM3D/Dream3dIO.hpp +++ b/src/simplnx/Utilities/Parsing/DREAM3D/Dream3dIO.hpp @@ -118,6 +118,23 @@ SIMPLNX_EXPORT Result ImportDataStructureFromFile(const std::file */ SIMPLNX_EXPORT Result ImportPipelineFromFile(const nx::core::HDF5::FileReader& fileReader); +/** + * @brief Imports and returns a Pipeline from the target .dream3d file. + * + * This method does not import legacy Pipelines. + * @param fileReader + * @return Pipeline + */ +SIMPLNX_EXPORT Result ImportPipelineJsonFromFile(const nx::core::HDF5::FileReader& fileReader); + +/** + * @brief Imports and returns a Pipeline from the target .dream3d file. + * This method does not import legacy Pipelines. + * @param fileReader + * @return Pipeline + */ +SIMPLNX_EXPORT Result ImportPipelineJsonFromFile(const std::filesystem::path& filePath); + /** * @brief Imports and returns a Pipeline from the target .dream3d file. * This method does not import legacy Pipelines.