166 lines
5.5 KiB
C++
166 lines
5.5 KiB
C++
#include "ConvertorManager.h"
|
|
//#include "ConsoleOutputWidget.h"
|
|
#include <QObject>
|
|
//#include "Geometry.h"
|
|
//#include "Log.h"
|
|
#include "ObjectGenralFactory.h"
|
|
// #include "SLFAsciiConvertor.h"
|
|
//void OSGFRAMEWORK_EXPORT AppendConsole(pai::log::Priority priority,const QString &output);
|
|
BEGIN_OSGGRAPHICS_NAMESPACE;
|
|
//CONST QString FORMAT_NOT_SUPPORT=QObject::tr("该文件编译器不支持,文件格式错误!");
|
|
ConvertorManager::ConvertorManager()
|
|
{
|
|
all=0;
|
|
}
|
|
|
|
ConvertorManager::~ConvertorManager()
|
|
{
|
|
qDeleteAll(m_vAllConvertors.begin(),m_vAllConvertors.end());
|
|
m_vAllConvertors.clear();
|
|
}
|
|
|
|
void ConvertorManager::LoadAllConvertorPlugin()
|
|
{
|
|
// //AppendConsole(pai::log::PAI_INFO,QObject::tr("格式转换模块加载中..."));
|
|
m_vConvertorNames=pai::datamodel::LoadAllPlugin("convertor");
|
|
StatisticalAllConvertors();
|
|
// //AppendConsole(pai::log::PAI_INFO,QObject::tr("格式转换模块加载完成"));
|
|
}
|
|
void ConvertorManager::UnLoadAllConvertorPlugin()
|
|
{
|
|
qDeleteAll(m_vAllConvertors.begin(),m_vAllConvertors.end());
|
|
m_vAllConvertors.clear();
|
|
}
|
|
|
|
QVector<IConvertor*> ConvertorManager::GetSupportConvertors( const QString &filename,DiDepthProgress *pDepthProgress)
|
|
{
|
|
m_vFileNameSupportConvertor.clear();
|
|
bool isInvalid=IsInvalidString(filename);
|
|
if(isInvalid) return m_vFileNameSupportConvertor;
|
|
QFileInfo currentfile(filename);
|
|
QVector<IConvertor*>::iterator it=m_vAllConvertors.begin();
|
|
for (;it!=m_vAllConvertors.end();it++)
|
|
{
|
|
(*it)->Init();
|
|
//第一步判断是否满足后缀过滤的要求
|
|
QVector<QString> supportedFileExt=(*it)->GetSupportFileExtensions();
|
|
bool fileExtIsOk=false;
|
|
for(int i=0;i<supportedFileExt.size();i++)
|
|
{
|
|
QStringList s1=supportedFileExt[i].split(';');
|
|
for(int j=0;j<s1.size();j++) {
|
|
int k=s1[j].indexOf('*');
|
|
if(k>-1) {
|
|
int flag=0;
|
|
QString sx=currentfile.suffix().toUpper();
|
|
QString s1j=s1[j].toUpper();
|
|
if(sx.size()>=s1j.size()) {
|
|
for(int n=0;n<k;n++) {
|
|
if(sx.at(n)!=s1j.at(n)) {
|
|
flag=1;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
//change end
|
|
if(!flag) {
|
|
fileExtIsOk=true;
|
|
break;
|
|
}
|
|
}
|
|
else {
|
|
if(currentfile.suffix().toUpper()==s1[j].toUpper())
|
|
{
|
|
fileExtIsOk=true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if(!fileExtIsOk) continue ;
|
|
//第二步判断该文件是否可以解编
|
|
(*it)->SetDepthProgress(pDepthProgress);
|
|
bool bSupport=(*it)->IsSupport(filename);
|
|
(*it)->SetDepthProgress(0);
|
|
if (!bSupport) continue ;
|
|
m_vFileNameSupportConvertor.push_back(*it);
|
|
}
|
|
if (m_vFileNameSupportConvertor.isEmpty()&&isInvalid)
|
|
{
|
|
if(all==0||all==QMessageBox::No||all==QMessageBox::Yes)
|
|
{
|
|
all=QMessageBox::information(NULL,filename,"没有合适的转换模块!是否强制转换?",QMessageBox::Yes|QMessageBox::No|QMessageBox::NoAll|QMessageBox::YesAll);
|
|
}
|
|
if(all==QMessageBox::NoAll||all==QMessageBox::No) return m_vFileNameSupportConvertor;
|
|
it=m_vAllConvertors.begin();
|
|
for (;it!=m_vAllConvertors.end();it++)
|
|
{
|
|
//第一步判断是否满足后缀过滤的要求
|
|
bool bSupport=(*it)->IsSupport(filename);
|
|
if (!bSupport)continue ;
|
|
m_vFileNameSupportConvertor.push_back(*it);
|
|
break;
|
|
}
|
|
if (m_vFileNameSupportConvertor.isEmpty()) {
|
|
// AppendConsole(pai::log::PAI_WARN,QObject::tr("该文件解编器不支持,文件格式错误!"));
|
|
QMessageBox::about(NULL, QObject::tr("警告"), QObject::tr("该文件解编器不支持,文件格式错误!"));
|
|
}
|
|
}
|
|
return m_vFileNameSupportConvertor;
|
|
}
|
|
|
|
QVector<QString>ConvertorManager::GetSupportFileExtensions()
|
|
{
|
|
if(m_vAllSuffixFileName.size()) return m_vAllSuffixFileName;
|
|
else {
|
|
QVector<IConvertor*>::iterator itor=m_vAllConvertors.begin();
|
|
int j=0;
|
|
for (;itor!=m_vAllConvertors.end();itor++)
|
|
{
|
|
QVector<QString>vSupportFileExtensionsConvertor=(*itor)->GetSupportFileExtensions();
|
|
for (int i=0;i<vSupportFileExtensionsConvertor.size();i++)
|
|
{
|
|
QVector<QString>::iterator itor=std::find(m_vAllSuffixFileName.begin(),m_vAllSuffixFileName.end(),vSupportFileExtensionsConvertor[i]);
|
|
if (itor==m_vAllSuffixFileName.end())//没有重复
|
|
{
|
|
m_vAllSuffixFileName.push_back(vSupportFileExtensionsConvertor[i]);
|
|
}
|
|
}
|
|
j++;
|
|
}
|
|
return m_vAllSuffixFileName;
|
|
}
|
|
}
|
|
|
|
QVector<IConvertor*>ConvertorManager::GetAllConvertors()
|
|
{
|
|
return m_vAllConvertors;
|
|
}
|
|
void ConvertorManager::StatisticalAllConvertors()
|
|
{
|
|
m_vAllConvertors.clear();
|
|
std::map<sConvertorKey,IConvertorFactory::pCreateObjectFunction>&mapConvertorType=IConvertor::GetFatory().m_map;
|
|
{
|
|
std::map<sConvertorKey,IConvertorFactory::pCreateObjectFunction>::iterator it=mapConvertorType.begin();
|
|
for (;it!=mapConvertorType.end();++it)
|
|
{
|
|
IConvertor*pConvertor=IConvertor::GetFatory().CreateObject(it->first);
|
|
if(!pConvertor) {
|
|
continue ;
|
|
}
|
|
pConvertor->SetConvertorTypeName(it->first.m_strConvertorTypeName);
|
|
// AppendConsole(pai::log::PAI_INFO,("格式转换模块加载完成:"+it->first.m_strConvertorTypeName));
|
|
m_vAllConvertors.push_back(pConvertor);
|
|
}
|
|
}
|
|
// sConvertorKey convertorKey(/*GetSLFAsciiConvertorTypeID()*/"{BB64AD58-A7F7-4AF7-956F-518372C298D2}","SLFAscii Well Log Convertor");
|
|
// CSLFAsciiConvertor* pSLFAConvertor= new CSLFAsciiConvertor();
|
|
// IConvertor* pConvertor= dynamic_cast<IConvertor*>(pSLFAConvertor);
|
|
// if(!pConvertor) {
|
|
// return;
|
|
// }
|
|
// pConvertor->SetConvertorTypeName(convertorKey.m_strConvertorTypeName);
|
|
// m_vAllConvertors.push_back(pConvertor);
|
|
}
|
|
END_OSGGRAPHICS_NAMESPACE;
|