37 #include <Dataflow/Network/Ports/StringPort.h>
39 #include <Dataflow/GuiInterface/GuiVar.h>
46 template <
class HType>
51 const std::string &category,
const std::string &package);
64 virtual bool call_importer(
const std::string &filename, HType & handle);
68 template <
class HType>
70 const std::string &cat,
const std::string &pack)
71 : Module(name, ctx, Source, cat, pack),
72 gui_filename_(get_ctx()->subVar(
"filename"),
""),
73 gui_from_env_(get_ctx()->subVar(
"from-env"),
""),
74 old_filemodification_(0),
80 template <
class HType>
89 template <
class HType>
93 bool filename_changed = gui_filename_.changed();
95 if (gui_from_env_.get() !=
"")
97 std::string filename_from_env = gui_from_env_.get();
100 std::string envfilename =
sci_getenv(filename_from_env);
101 gui_filename_.set(envfilename);
103 filename_changed =
true;
109 if (get_input_handle(
"Filename",shandle,
false))
111 gui_filename_.set(shandle->get());
113 filename_changed =
true;
116 const std::string filename(gui_filename_.get());
123 error(
"No file has been selected. Please choose a file.");
126 else if (stat(filename.c_str(), &buf))
130 error(
"File '" + filename +
"' not found.");
135 warning(
"File '" + filename +
"' not found. Maybe the plugin can find it?");
142 time_t new_filemodification = buf.st_mtime;
144 if( inputs_changed_ || filename_changed ||
145 new_filemodification != old_filemodification_ ||
147 !oport_cached(
"Filename") )
149 update_state(Executing);
150 old_filemodification_ = new_filemodification;
154 remark(
"loading file " +filename);
158 if (!call_importer(filename, handle))
160 error(
"Import failed.");
169 error(
"Error reading file '" + filename +
"'.");
174 Pio(*stream, handle);
176 if (!handle.get_rep() || stream->error())
178 error(
"Error reading data from file '" + filename +
"'.");
183 shandle =
new String(gui_filename_.get());
184 send_output_handle(
"Filename", shandle);
186 send_output_handle(0, handle);
LockingHandle< String > StringHandle
Definition: String.h:57
time_t old_filemodification_
Definition: GenericReader.h:60
bool importing_
Definition: GenericReader.h:62
SCISHARE const char * sci_getenv(const std::string &key)
PiostreamPtr auto_istream(const std::string &filename, LoggerHandle pr)
Definition: Persistent.cc:394
boost::shared_ptr< Piostream > PiostreamPtr
Definition: Persistent.h:80
const char * name[]
Definition: BoostGraphExampleTests.cc:87
virtual ~GenericReader()
Definition: GenericReader.h:52
virtual bool call_importer(const std::string &filename, HType &handle)
Definition: GenericReader.h:82
virtual void execute()
Definition: GenericReader.h:91
void Pio(Piostream &stream, Array1< T > &array)
Definition: Array1.h:65
GuiFilename gui_filename_
Definition: GenericReader.h:57
GuiString gui_from_env_
Definition: GenericReader.h:58
GenericReader(const std::string &name, GuiContext *ctx, const std::string &category, const std::string &package)
Definition: GenericReader.h:69
Definition: GenericReader.h:47