logplus/ConvertorManager/src/ConvertorManager.cpp
2025-10-29 17:23:30 +08:00

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;