diff --git a/modules/dataloader/CMakeLists.txt b/modules/dataloader/CMakeLists.txt index 2a1471ff2e..ea243abcba 100644 --- a/modules/dataloader/CMakeLists.txt +++ b/modules/dataloader/CMakeLists.txt @@ -26,15 +26,19 @@ include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) set(HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/dataloadermodule.h - ${CMAKE_CURRENT_SOURCE_DIR}/reader.h - ${CMAKE_CURRENT_SOURCE_DIR}/loader.h + ${CMAKE_CURRENT_SOURCE_DIR}/helpers.h + ${CMAKE_CURRENT_SOURCE_DIR}/operators/operator.h + ${CMAKE_CURRENT_SOURCE_DIR}/operators/reader.h + ${CMAKE_CURRENT_SOURCE_DIR}/operators/loader.h ) source_group("Header Files" FILES ${HEADER_FILES}) set(SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/dataloadermodule.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/reader.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/loader.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/helpers.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/operators/operator.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/operators/reader.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/operators/loader.cpp ) option(OPENSPACE_MODULE_DATALOADER "Use Data Loader Module" ON) diff --git a/modules/dataloader/dataloadermodule.cpp b/modules/dataloader/dataloadermodule.cpp index 075b4b752b..940ee364c5 100644 --- a/modules/dataloader/dataloadermodule.cpp +++ b/modules/dataloader/dataloadermodule.cpp @@ -23,27 +23,59 @@ ****************************************************************************************/ #include -#include -#include -#include +#include +#include +#include +#include +#include #include +namespace { + constexpr const char* _loggerCat = "DataLoaderModule"; +} + namespace openspace { -using namespace dataloader; - DataLoaderModule::DataLoaderModule() : OpenSpaceModule(Name) {} -void DataLoaderModule::internalInitialize(const ghoul::Dictionary&) { - // auto rFactory = FactoryManager::ref().factory(); - // ghoul_assert(rFactory, "No renderable factory existed"); - // rFactory->registerClass("RenderableTimeVaryingVolume"); +DataLoaderModule::~DataLoaderModule() {} - _reader = std::make_unique(); - _loader = std::make_unique(); - addPropertySubOwner(*_reader); - addPropertySubOwner(*_loader); +void DataLoaderModule::internalInitialize(const ghoul::Dictionary&) { + OsEng.registerModuleCallback(OpenSpaceEngine::CallbackOption::Initialize, [&] { + _reader = std::make_unique(); + _loader = std::make_unique(); + addPropertySubOwner(*_reader); + addPropertySubOwner(*_loader); + }); +} + +void DataLoaderModule::setDataDirectoryRead(bool isRead) { + LDEBUG("Called a module function"); + _dataDirectoryIsRead = isRead; +} + +void DataLoaderModule::validateDataDirectory() { + if(!_dataDirectoryIsRead) { + _reader->readVolumeDataItems(); + } +} + +std::vector DataLoaderModule::volumeDataItems() { + validateDataDirectory(); + return _volumeDataItems; +} + +void DataLoaderModule::setVolumeDataItems(std::vector items) { + _volumeDataItems = items; +} + +openspace::dataloader::Reader* DataLoaderModule::reader() { + return _reader.get(); +} + +openspace::dataloader::Loader* DataLoaderModule::loader() { + return _loader.get(); } } // namespace openspace diff --git a/modules/dataloader/dataloadermodule.h b/modules/dataloader/dataloadermodule.h index c1adad6128..3374d92126 100644 --- a/modules/dataloader/dataloadermodule.h +++ b/modules/dataloader/dataloadermodule.h @@ -26,13 +26,16 @@ #define __OPENSPACE_MODULE_DATALOADER___DATALOADERMODULE___H__ #include -#include -#include + +namespace openspace::dataloader { + class Reader; + class Loader; +} namespace openspace { /** - * Own reader, writer, loader + * Reference reader, writer, loader * Have functions like getDataItemList that gets list from reader */ class DataLoaderModule : public OpenSpaceModule { @@ -40,12 +43,26 @@ public: constexpr static const char* Name = "DataLoader"; DataLoaderModule(); + ~DataLoaderModule(); void internalInitialize(const ghoul::Dictionary&) override; + void validateDataDirectory(); + void setDataDirectoryRead(bool isRead); + + std::vector volumeDataItems(); + void setVolumeDataItems(std::vector items); + + dataloader::Reader* reader(); + dataloader::Loader* loader(); + private: - std::unique_ptr _reader; - std::unique_ptr _loader; + bool _dataDirectoryIsRead = true; + + std::unique_ptr _reader; + std::unique_ptr _loader; + + std::vector _volumeDataItems; }; } // namespace openspace diff --git a/modules/dataloader/helpers.cpp b/modules/dataloader/helpers.cpp new file mode 100644 index 0000000000..ad9ae62876 --- /dev/null +++ b/modules/dataloader/helpers.cpp @@ -0,0 +1,22 @@ + +#include +#include + +#include + +namespace openspace::dataloader::helpers { + namespace { + constexpr const char* _loggerCat = "Helper"; + } + + std::string getDirLeaf(std::string dir) { + std::regex dirLeaf_regex("([^/]+)/?$"); + std::smatch dirLeaf_match; + + if (std::regex_search(dir, dirLeaf_match, dirLeaf_regex)) { + return dirLeaf_match[0].str(); + } else { + LWARNING("Found no match in " + dir + "."); + } + } +} diff --git a/modules/dataloader/helpers.h b/modules/dataloader/helpers.h new file mode 100644 index 0000000000..de4cfb7cc2 --- /dev/null +++ b/modules/dataloader/helpers.h @@ -0,0 +1,5 @@ +#include + +namespace openspace::dataloader::helpers { + std::string getDirLeaf(std::string dir); +} diff --git a/modules/dataloader/loader.cpp b/modules/dataloader/operators/loader.cpp similarity index 84% rename from modules/dataloader/loader.cpp rename to modules/dataloader/operators/loader.cpp index 60a9cb6d18..1f50b6ab5c 100644 --- a/modules/dataloader/loader.cpp +++ b/modules/dataloader/operators/loader.cpp @@ -22,9 +22,12 @@ * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * ****************************************************************************************/ -#include -#include #include +#include +#include +#include +#include +#include #ifdef _WIN32 #include @@ -32,7 +35,7 @@ namespace { constexpr const char* _loggerCat = "Loader"; -} // namespace +} namespace { static const openspace::properties::Property::PropertyInfo SelectedFilesInfo = { @@ -65,8 +68,6 @@ Loader::Loader() void Loader::uploadData() { - char filepath[ MAX_PATH ]; - // Linux #ifdef _linux system("thunar /home/mberg"); @@ -74,6 +75,8 @@ void Loader::uploadData() { // Windows #elif _WIN32 + char filepath[ MAX_PATH ]; + OPENFILENAME ofn; ZeroMemory( &filepath, sizeof( filepath ) ); ZeroMemory( &ofn, sizeof( ofn ) ); @@ -127,17 +130,35 @@ void Loader::uploadData() { } void Loader::addInternalDataItemProperties() { - // Get list of internal data items + getModule()->validateDataDirectory(); + std::vector volumeItems = getModule()->volumeDataItems(); - // Iterate data items - // Initialize trigger property with data item name (are they unique?) - // Set onChange method to call loadDataItem with the path as argument - // addProperty() + for (auto item : volumeItems) { + static const openspace::properties::Property::PropertyInfo info = { + "ItemTrigger_" + openspace::dataloader::helpers::getDirLeaf(item), + "", + "" + }; + + // Initialize trigger property with data item name (are they unique?) + properties::TriggerProperty volumeItemTrigger(info); + + // Set onChange method to call loadDataItem with the path as argument + volumeItemTrigger.onChange([this](){ + // loadDataItem(item); + }); + + addProperty(volumeItemTrigger); + } } // addDataItemProperty(); // removeDataItemProperties(); -// loadDataItem(std::string absPathToItem); + +// loadDataItem(std::string absPathToItem) { +// LINFO("Load item " + absPathToItem); +// } + // createVolumeDataItem(std::string absPath); } diff --git a/modules/dataloader/loader.h b/modules/dataloader/operators/loader.h similarity index 95% rename from modules/dataloader/loader.h rename to modules/dataloader/operators/loader.h index e061e6d5bb..705adb0341 100644 --- a/modules/dataloader/loader.h +++ b/modules/dataloader/operators/loader.h @@ -25,13 +25,16 @@ #ifndef __OPENSPACE_MODULE_DATALOADER___LOADER___H__ #define __OPENSPACE_MODULE_DATALOADER___LOADER___H__ +#include #include #include #include namespace openspace::dataloader { -class Loader : public properties::PropertyOwner { +using properties::PropertyOwner; + +class Loader : public PropertyOwner, public Operator { public: Loader(); diff --git a/modules/dataloader/operators/operator.cpp b/modules/dataloader/operators/operator.cpp new file mode 100644 index 0000000000..a5532ba911 --- /dev/null +++ b/modules/dataloader/operators/operator.cpp @@ -0,0 +1,13 @@ + +#include +#include +#include +#include + +namespace openspace::dataloader { + +DataLoaderModule* Operator::getModule() { + return OsEng.moduleEngine().module(); +} + +} diff --git a/modules/dataloader/operators/operator.h b/modules/dataloader/operators/operator.h new file mode 100644 index 0000000000..82696afeb9 --- /dev/null +++ b/modules/dataloader/operators/operator.h @@ -0,0 +1,23 @@ + +#ifndef __OPENSPACE_MODULE_DATALOADER___OPERATOR___H__ +#define __OPENSPACE_MODULE_DATALOADER___OPERATOR___H__ +// #include + +namespace openspace { + +class DataLoaderModule; + +namespace dataloader { + +class Operator { + public: + virtual ~Operator() {}; + + protected: + DataLoaderModule* getModule(); +}; + +} +} + +#endif // __OPENSPACE_MODULE_DATALOADER___OPERATOR___H__ \ No newline at end of file diff --git a/modules/dataloader/reader.cpp b/modules/dataloader/operators/reader.cpp similarity index 93% rename from modules/dataloader/reader.cpp rename to modules/dataloader/operators/reader.cpp index 806337b124..7b547bf4bf 100644 --- a/modules/dataloader/reader.cpp +++ b/modules/dataloader/operators/reader.cpp @@ -22,18 +22,27 @@ * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * ****************************************************************************************/ -#include +#include +#include + +#include +#include #include #include + #include #include -#include -#include + +#include + +#ifdef _WIN32 +#include +#endif namespace { constexpr const char* _loggerCat = "Reader"; -} // namespace +} namespace { static const openspace::properties::Property::PropertyInfo VolumesInfo = { @@ -93,7 +102,8 @@ void Reader::readVolumeDataItems() { ghoul::filesystem::Directory::Sort::Yes ); - // DataLoader _internalDirDirty = false + getModule()->setVolumeDataItems(_volumeItems); + getModule()->setDataDirectoryRead(true); // for (auto el : volumeItems) { // LINFO("A dir: " + el); @@ -109,7 +119,6 @@ void Reader::readVolumeDataItems() { // if (std::regex_search(dir, dirLeaf_match, dirLeaf_regex)) { // itemDirLeaves.push_back(dirLeaf_match[0].str()); // } else { - // LWARNING("Looked for match in " + dir + " but found none."); // } // } diff --git a/modules/dataloader/reader.h b/modules/dataloader/operators/reader.h similarity index 95% rename from modules/dataloader/reader.h rename to modules/dataloader/operators/reader.h index 4e5811380f..4b40b88d1d 100644 --- a/modules/dataloader/reader.h +++ b/modules/dataloader/operators/reader.h @@ -25,6 +25,7 @@ #ifndef __OPENSPACE_MODULE_DATALOADER___READER___H__ #define __OPENSPACE_MODULE_DATALOADER___READER___H__ +#include #include #include // do we need this #include @@ -33,7 +34,9 @@ namespace openspace::dataloader { -class Reader : public properties::PropertyOwner { +using properties::PropertyOwner; + +class Reader : public PropertyOwner, public Operator { public: Reader(); diff --git a/modules/dataloader/writer.cpp b/modules/dataloader/operators/writer.cpp similarity index 100% rename from modules/dataloader/writer.cpp rename to modules/dataloader/operators/writer.cpp diff --git a/modules/dataloader/writer.h b/modules/dataloader/operators/writer.h similarity index 100% rename from modules/dataloader/writer.h rename to modules/dataloader/operators/writer.h