23 #include <itksys/SystemTools.hxx> 29 Impl() : m_FileReader(nullptr), m_ConfidenceLevel(IFileReader::Unsupported), m_Id(-1) {}
31 IFileReader *m_FileReader;
39 Impl() : m_BestId(-1), m_SelectedId(m_BestId) {}
40 Impl(
const Impl &other) :
us::SharedData(other), m_BestId(-1), m_SelectedId(m_BestId) {}
41 FileReaderRegistry m_ReaderRegistry;
42 std::map<long, FileReaderSelector::Item> m_Items;
43 std::vector<MimeType> m_MimeTypes;
51 if (!itksys::SystemTools::FileExists(path.c_str()))
61 if (m_Data->m_MimeTypes.empty())
64 for (std::vector<MimeType>::const_iterator mimeTypeIter = m_Data->m_MimeTypes.begin(),
65 mimeTypeIterEnd = m_Data->m_MimeTypes.end();
66 mimeTypeIter != mimeTypeIterEnd;
69 std::vector<FileReaderRegistry::ReaderReference> refs = m_Data->m_ReaderRegistry.GetReferences(*mimeTypeIter);
70 for (std::vector<FileReaderRegistry::ReaderReference>::const_iterator readerIter = refs.begin(),
72 readerIter != iterEnd;
75 IFileReader *reader = m_Data->m_ReaderRegistry.GetReader(*readerIter);
76 if (reader ==
nullptr)
88 item.d->m_FileReaderRef = *readerIter;
89 item.d->m_FileReader = reader;
90 item.d->m_ConfidenceLevel = confidenceLevel;
91 item.d->m_MimeType = *mimeTypeIter;
93 m_Data->m_Items.insert(std::make_pair(item.d->m_Id, item));
100 catch (
const std::exception &e)
103 MITK_WARN <<
"IFileWriter::GetConfidenceLevel exception: " << e.what();
110 if (!m_Data->m_Items.empty())
112 std::set<Item> sortedItems;
113 for (std::map<long, Item>::const_iterator iter = m_Data->m_Items.begin(), iterEnd = m_Data->m_Items.end();
117 sortedItems.insert(iter->second);
119 m_Data->m_BestId = sortedItems.rbegin()->GetServiceId();
120 m_Data->m_SelectedId = m_Data->m_BestId;
127 m_Data = other.m_Data;
135 std::vector<Item> result;
136 for (std::map<long, Item>::const_iterator iter = m_Data->m_Items.begin(), iterEnd = m_Data->m_Items.end();
140 result.push_back(iter->second);
142 std::sort(result.begin(), result.end());
148 std::map<long, Item>::const_iterator iter = m_Data->m_Items.find(
id);
149 if (iter != m_Data->m_Items.end())
165 if (m_Data->m_Items.find(
id) == m_Data->m_Items.end())
169 m_Data->m_SelectedId = id;
189 return std::string();
200 if (d->m_ConfidenceLevel == other.d->m_ConfidenceLevel)
203 if (d->m_MimeType < other.d->m_MimeType)
207 else if (other.d->m_MimeType < d->m_MimeType)
214 return d->m_FileReaderRef < other.d->m_FileReaderRef;
217 return d->m_ConfidenceLevel < other.d->m_ConfidenceLevel;
220 FileReaderSelector::Item::Item() : d(
new Impl()) {}
virtual ConfidenceLevel GetConfidenceLevel() const =0
The confidence level of the reader or writer implementation.
long GetSelectedId() const
static IMimeTypeProvider * GetMimeTypeProvider(us::ModuleContext *context=us::GetModuleContext())
Get an IMimeTypeProvider instance.
std::string GetDescription() const
bool Select(const Item &item)
static std::string PROP_DESCRIPTION()
Service property name for a description.
DataCollection - Class to facilitate loading/accessing structured data.
ValueType * any_cast(Any *operand)
std::vector< MimeType > GetMimeTypes() const
Item & operator=(const Item &other)
std::string ToString() const
std::vector< Item > Get() const
Get a sorted list of file reader items.
const char * what() const override
FileReaderSelector(const FileReaderSelector &other)
void Swap(ExplicitlySharedDataPointer &other)
us::ServiceReference< IFileReader > GetReference() const
virtual void SetInput(const std::string &location)=0
Set the input location.
ConfidenceLevel
A confidence level describing the confidence of the reader or writer in handling the given data...
long GetDefaultId() const
IFileReader * GetReader() const
void swap(CustomMimeType &l, CustomMimeType &r)
long GetServiceId() const
The MimeType class represens a registered mime-type. It is an immutable wrapper for mitk::CustomMimeT...
IFileReader::ConfidenceLevel GetConfidenceLevel() const
MimeType GetMimeType() const
void Swap(FileReaderSelector &fws)
A RAII helper class for core service objects.
The common interface for all MITK file readers.
US_Core_EXPORT const std::string & SERVICE_ID()
FileReaderSelector & operator=(const FileReaderSelector &other)
bool operator<(const Item &other) const
virtual std::vector< MimeType > GetMimeTypesForFile(const std::string &filePath) const =0