38 #ifndef MODULES_DATAIO_GENERIC_READER_H
39 #define MODULES_DATAIO_GENERIC_READER_H
41 #include <boost/filesystem.hpp>
51 template <
class HType,
class PortTag>
57 GenericReader(
const std::string &
name,
const std::string &category,
const std::string &package,
const std::string& stateFilename);
73 virtual bool call_importer(
const std::string &filename, HType & handle) {
return false; }
76 static bool file_exists(
const std::string & filename);
80 template <
class HType,
class PortTag>
82 const std::string &cat,
const std::string &pack,
const std::string& objectPortName)
83 : SCIRun::Dataflow::Networks::Module(SCIRun::Dataflow::Networks::ModuleLookupInfo(name, cat, pack)),
86 objectPortName_(SCIRun::Dataflow::Networks::PortId(0, objectPortName)),
87 old_filemodification_(0)
93 template <
class HType,
class PortTag>
96 template <
class HType,
class PortTag>
102 return boost::filesystem::exists(filename);
105 template <
class HType,
class PortTag>
109 #ifdef SCIRUN4_CODE_TO_BE_ENABLED_LATER
110 bool filename_changed = gui_filename_.changed();
112 if (gui_from_env_.get() !=
"")
114 std::string filename_from_env = gui_from_env_.get();
117 std::string envfilename =
sci_getenv(filename_from_env);
118 gui_filename_.set(envfilename);
120 filename_changed =
true;
127 auto fileOption = getOptionalInput(Filename);
131 filename_ = (*fileOption)->value();
135 if (filename_.empty())
137 error(
"No file has been selected. Please choose a file.");
140 else if (!file_exists(filename_))
142 if (!useCustomImporter(filename_))
144 error(
"File '" + filename_ +
"' not found.");
149 warning(
"File '" + filename_ +
"' not found. Maybe the plugin can find it?");
156 time_t new_filemodification = boost::filesystem::last_write_time(filename_);
160 inputs_changed_ || filename_changed ||
161 new_filemodification != old_filemodification_ ||
163 !oport_cached(
"Filename")
169 update_state(Executing);
170 old_filemodification_ = new_filemodification;
174 remark(
"loading file " +filename_);
176 if (useCustomImporter(filename_))
178 if (!call_importer(filename_, handle))
180 error(
"Import failed.");
189 error(
"Error reading file '" + filename_ +
"'.");
194 Pio(*stream, handle);
196 if (!handle || stream->error())
198 error(
"Error reading data from file '" + filename_ +
"'.");
204 sendOutput(FileLoaded, shandle);
205 sendOutput(objectPortName_, handle);
#define SCIRUN4_CODE_TO_BE_ENABLED_LATER
Definition: Macros.h:32
OUTPUT_PORT(1, FileLoaded, String)
std::string filename_
Definition: GenericReader.h:65
GenericReader(const std::string &name, const std::string &category, const std::string &package, const std::string &stateFilename)
Definition: GenericReader.h:81
virtual void execute()
Definition: GenericReader.h:107
SCISHARE const char * sci_getenv(const std::string &key)
PiostreamPtr auto_istream(const std::string &filename, LoggerHandle pr)
Definition: Persistent.cc:394
INPUT_PORT(0, Filename, String)
boost::shared_ptr< Piostream > PiostreamPtr
Definition: Persistent.h:80
const char * name[]
Definition: BoostGraphExampleTests.cc:87
boost::shared_ptr< String > StringHandle
Definition: DatatypeFwd.h:58
static const AlgorithmParameterName Filename
Definition: AlgorithmVariableNames.h:49
static Core::Thread::Mutex fileCheckMutex_
Definition: GenericReader.h:75
#define INITIALIZE_PORT(nameObj)
Definition: Module.h:674
Definition: GenericReader.h:52
void Pio(Piostream &stream, Array1< T > &array)
Definition: Array1.h:65
StaticPortName< typename HType::element_type, 0 > objectPortName_
Definition: GenericReader.h:66
virtual bool useCustomImporter(const std::string &filename) const =0
static bool file_exists(const std::string &filename)
Definition: GenericReader.h:98
boost::lock_guard< boost::mutex > Guard
Definition: Mutex.h:55
virtual bool call_importer(const std::string &filename, HType &handle)
Definition: GenericReader.h:73
time_t old_filemodification_
Definition: GenericReader.h:70