29 #ifndef SCI_project_GenericIEPlugin_h
30 #define SCI_project_GenericIEPlugin_h 1
35 #include <boost/lexical_cast.hpp>
36 #include <boost/foreach.hpp>
49 virtual std::string
fileMagic()
const = 0;
75 virtual std::string
pluginname()
const override {
return pluginname_; }
76 virtual std::string
fileExtension()
const override {
return fileextension_; }
77 virtual std::string
fileMagic()
const override {
return filemagic_; }
78 virtual bool hasReader()
const {
return filereader_ !=
nullptr; }
79 virtual bool hasWriter()
const {
return filewriter_ !=
nullptr; }
86 const std::string &fileextension,
87 const std::string &filemagic,
96 const std::string pluginname_;
97 const std::string fileextension_;
98 const std::string filemagic_;
102 boost::shared_ptr<Data> f,
const char *filename);
105 template <
class Data>
110 typedef std::map<std::string, GenericIEPluginInterface<Data>*>
PluginMap;
125 template <
class Data>
128 template <
class Data>
131 template <
class Data>
137 template <
class Data>
142 return *pluginTable_;
145 template <
class Data>
154 template <
class Data>
157 return pluginTable_ ? pluginTable_->size() : 0;
160 template <
class Data>
169 BOOST_FOREACH(
const typename PluginMap::value_type& plugin, *pluginTable_)
171 if (plugin.second->hasReader())
172 results.push_back(plugin.first);
176 template <
class Data>
185 BOOST_FOREACH(
const typename PluginMap::value_type& plugin, *pluginTable_)
187 if (plugin.second->hasWriter())
188 results.push_back(plugin.first);
192 template <
class Data>
200 auto loc = pluginTable_->find(name);
201 if (loc == pluginTable_->end())
211 template <
class Data>
219 template <
class Data>
221 const std::string& fextension,
222 const std::string& fmagic,
225 : pluginname_(pname),
226 fileextension_(fextension),
228 filereader_(freader),
235 std::string tmppname = pluginname_;
242 if (tmppname != pluginname_) {
const_cast<std::string&
>(pluginname_) = tmppname; }
246 if (*(*loc).second == *
this)
248 std::cerr <<
"WARNING: FieldIEPlugin '" << tmppname <<
"' duplicated.\n";
252 std::cout <<
"WARNING: Multiple FieldIEPlugins with '" << pluginname_ <<
"' name.\n";
253 tmppname = pluginname_ +
"(" + boost::lexical_cast<std::string>(counter) +
")";
258 template <
class Data>
266 std::cerr <<
"WARNING: FieldIEPlugin " << pluginname_ <<
" not found in database for removal.\n";
279 template <
class Data>
282 return filereader_(log, filename.c_str());
285 template <
class Data>
288 return filewriter_(log, f, filename.c_str());
291 template <
class Data>
297 return *
this == *impl;
300 template <
class Data>
303 return (pluginname_ == other.pluginname_ &&
304 fileextension_ == other.fileextension_ &&
305 filemagic_ == other.filemagic_ &&
306 filereader_ == other.filereader_ &&
307 filewriter_ == other.filewriter_);
310 template <
class Data>
321 template <
class Data>
324 std::ostringstream types;
325 types << defaultType;
327 BOOST_FOREACH(
const std::string& name, pluginNames)
330 types <<
";;" <<
name;
331 if (!pl->fileExtension().empty())
333 types <<
" (*." << pl->fileExtension() <<
")";
344 template <
class Data>
347 std::vector<std::string> importers;
353 template <
class Data>
362 template <
class Data>
365 std::vector<std::string> exporters;
static void createMap()
Definition: GenericIEPlugin.h:146
boost::shared_ptr< LegacyLoggerInterface > LoggerHandle
Definition: LoggerFwd.h:42
bool operator==(const IEPluginLegacyAdapter &other) const
Definition: GenericIEPlugin.h:301
virtual bool hasReader() const
Definition: GenericIEPlugin.h:78
std::string makeGuiTypesListForImport(const GenericIEPluginManager< Data > &mgr)
Definition: GenericIEPlugin.h:345
virtual ~GenericIEPluginInterface()
Definition: GenericIEPlugin.h:46
Definition: GenericIEPlugin.h:106
Definition: GenericIEPlugin.h:43
virtual bool writeFile(boost::shared_ptr< Data > f, const std::string &filename, Core::Logging::LoggerHandle log) const override
Definition: GenericIEPlugin.h:286
IEPluginLegacyAdapter(const std::string &name, const std::string &fileextension, const std::string &filemagic, boost::shared_ptr< Data >(*freader)(Core::Logging::LoggerHandle pr, const char *filename)=0, bool(*fwriter)(Core::Logging::LoggerHandle pr, boost::shared_ptr< Data > f, const char *filename)=0)
Definition: GenericIEPlugin.h:220
#define SCISHARE
Definition: share.h:39
virtual std::string pluginname() const =0
void get_importer_list(std::vector< std::string > &results) const
Definition: GenericIEPlugin.h:161
virtual std::string fileExtension() const override
Definition: GenericIEPlugin.h:76
std::map< std::string, GenericIEPluginInterface< Data > * > PluginMap
Definition: GenericIEPlugin.h:110
virtual boost::shared_ptr< Data > readFile(const std::string &filename, Core::Logging::LoggerHandle log) const =0
virtual std::string fileMagic() const =0
size_t numPlugins() const
Definition: GenericIEPlugin.h:155
GenericIEPluginInterface< Data > * get_plugin(const std::string &name) const
Definition: GenericIEPlugin.h:193
virtual bool equals(const GenericIEPluginInterface< Data > &other) const =0
std::string makeGuiTypesListForExport(const GenericIEPluginManager< Data > &mgr)
Definition: GenericIEPlugin.h:363
bool operator==(const SparseSparseElement &s1, const SparseSparseElement &s2)
Definition: SparseMatrixFunctions.cc:104
std::string defaultImportTypeForFile(const GenericIEPluginManager< Data > *mgr=0)
Definition: GenericIEPlugin.h:311
const char * name[]
Definition: BoostGraphExampleTests.cc:87
~IEPluginLegacyAdapter()
Definition: GenericIEPlugin.h:259
bool operator!=(const GenericIEPluginInterface< Data > &lhs, const GenericIEPluginInterface< Data > &rhs)
Definition: GenericIEPlugin.h:65
virtual std::string fileMagic() const override
Definition: GenericIEPlugin.h:77
std::string printPluginDescriptionsForFilter(const GenericIEPluginManager< Data > &mgr, const std::string &defaultType, const std::vector< std::string > &pluginNames)
Definition: GenericIEPlugin.h:322
virtual bool writeFile(boost::shared_ptr< Data > f, const std::string &filename, Core::Logging::LoggerHandle log) const =0
virtual bool equals(const GenericIEPluginInterface< Data > &other) const override
Definition: GenericIEPlugin.h:292
void get_exporter_list(std::vector< std::string > &results) const
Definition: GenericIEPlugin.h:177
SCISHARE std::string fileTypeDescriptionFromDialogBoxFilter(const std::string &fileFilter)
Definition: NrrdIEPlugin.cc:37
static Core::Thread::Mutex & getLock()
Definition: GenericIEPlugin.h:132
static PluginMap & getMap()
Definition: GenericIEPlugin.h:138
virtual std::string fileExtension() const =0
virtual std::string pluginname() const override
Definition: GenericIEPlugin.h:75
virtual bool hasWriter() const
Definition: GenericIEPlugin.h:79
virtual bool hasReader() const =0
virtual bool hasWriter() const =0
virtual boost::shared_ptr< Data > readFile(const std::string &filename, Core::Logging::LoggerHandle log) const override
Definition: GenericIEPlugin.h:280
boost::lock_guard< boost::mutex > Guard
Definition: Mutex.h:55
std::string defaultExportTypeForFile(const GenericIEPluginManager< Data > *mgr=0)
Definition: GenericIEPlugin.h:354
Definition: GenericIEPlugin.h:72
static void destroyMap()
Definition: GenericIEPlugin.h:212