DPS/DataPlatform/DataModelData.cpp

643 lines
17 KiB
C++
Raw Normal View History

2025-06-23 10:41:33 +08:00
#pragma execution_character_set("utf-8")
#include <QFileDialog>
#include "DataModelData.h"
#include "global.h"
#include "M_EntityModelDAO.h"
#include "M_FolderDAO.h"
#include "DataPack.h"
#include "DataManager.h"
#include "ProjectData.h"
#include "DataClass.h"
#include "DataAttribute.h"
#include <QDateTime>
2025-06-23 18:01:09 +08:00
//数据模型
2025-06-23 10:41:33 +08:00
DataModelData::DataModelData()
{
_baseType = g_TYPE_DATAMODEL;
}
DataModelData::~DataModelData()
{
}
void static backupDAOData(DBPlatformSpace::M_EntityModelDAO& src, DBPlatformSpace::M_EntityModelDAO& dst)
{
}
void static restoreData(DBPlatformSpace::M_EntityModelDAO& src, DataModelData& dst)
{
2025-06-23 18:01:09 +08:00
//主要恢复界面属性值和updateTime值
2025-06-23 10:41:33 +08:00
}
void DataModelData::saveToDao()
{
using namespace DBPlatformSpace;
M_EntityModelDAO* pDao = dynamic_cast<M_EntityModelDAO*>(_pDBDAO);
if (pDao == nullptr)
{
pDao = new M_EntityModelDAO();
_pDBDAO = pDao;
}
2025-06-23 18:01:09 +08:00
pDao->_name = CommonHelper::qstringToStdString(getName()); //数据模型标识
2025-06-23 10:41:33 +08:00
pDao->_type = _type;
pDao->_createTime = CommonHelper::qstringToStdString(_createTime);
pDao->_updateTime = CommonHelper::qstringToStdString(_updateTime);
pDao->_description = CommonHelper::qstringToStdString(_description);
pDao->_isVersionLocked = _isVerLocked; //?
pDao->_displayName = CommonHelper::qstringToStdString(_displayName);
}
bool DataModelData::saveSelf()
{
using namespace DBPlatformSpace;
ResultMsg rm;
2025-06-23 18:01:09 +08:00
/*将这条项目数据写入数据库*/
2025-06-23 10:41:33 +08:00
M_EntityModelDAO* pDao = dynamic_cast<M_EntityModelDAO*>(_pDBDAO);
2025-06-23 18:01:09 +08:00
/*备份DAO数据*/
2025-06-23 10:41:33 +08:00
M_EntityModelDAO oldDaoData;
if (pDao == nullptr)
{
pDao = new M_EntityModelDAO();
_pDBDAO = pDao;
}
else
{
backupDAOData(*pDao, oldDaoData);
}
saveToDao();
rm = pDao->save();
if (rm.rCode == 0)
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.save success");
return true;
}
else
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.save failed");
LOG(INFO) << rm.rMsg;
restoreData(oldDaoData, *this);
return false;
}
}
bool DataModelData::addChild(DPData* pNewData)
{
2025-06-23 18:01:09 +08:00
//新增数据类模块
2025-06-23 10:41:33 +08:00
using namespace DBPlatformSpace;
ResultMsg rm;
M_EntityModelDAO* pModelDAO = dynamic_cast<M_EntityModelDAO*>(_pDBDAO);
pNewData->saveToDao();
DataPack* pPack = qobject_cast<DataPack*>(pNewData);
M_FolderDAO* pFolderDAO = dynamic_cast<M_FolderDAO*>(pNewData->_pDBDAO);
rm = pModelDAO->addM_FolderDAO(pFolderDAO);
if (rm.rCode == 0)
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.addM_FolderDAO success");
2025-06-23 18:01:09 +08:00
//新建成功
2025-06-23 10:41:33 +08:00
pPack->_id = pFolderDAO->_ID;
2025-06-23 18:01:09 +08:00
pPack->_wCreateVersion = pFolderDAO->_addVersion; //建立版本
//保存数据模型成功添加到childMap
2025-06-23 10:41:33 +08:00
_childrenMap.insert(pNewData->_id, pNewData);
return true;
}
else
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.addM_FolderDAO failed");
LOG(ERROR) << rm.rMsg;
return false;
}
}
bool DataModelData::deleteChild(unsigned int id)
{
_childrenMap.remove(id);
return true;
}
2025-06-23 18:01:09 +08:00
/*从数据库加载数据到当前对象*/
2025-06-23 10:41:33 +08:00
void DataModelData::loadData(DBPlatformSpace::DAO* pDao)
{
_pDBDAO = pDao;
2025-06-23 18:01:09 +08:00
//将DAO数据存入DataModelData对象
2025-06-23 10:41:33 +08:00
DBPlatformSpace::M_EntityModelDAO* pDAOData = dynamic_cast<DBPlatformSpace::M_EntityModelDAO*>(_pDBDAO);
setID(pDAOData->_ID);
2025-06-23 18:01:09 +08:00
setName(CommonHelper::stringToQstring(pDAOData->_name)); //数据模型标识
2025-06-23 10:41:33 +08:00
_type = pDAOData->_type;
_createTime = CommonHelper::stringToQstring(pDAOData->_createTime);
_updateTime = CommonHelper::stringToQstring(pDAOData->_updateTime);
_description = CommonHelper::stringToQstring(pDAOData->_description);
_displayName = CommonHelper::stringToQstring(pDAOData->_displayName);
_version = pDAOData->_version;
_isDeleted = pDAOData->_isDeleted;
_isReleased = pDAOData->_isReleased;
_isVerLocked = pDAOData->_isVersionLocked;
}
2025-06-23 18:01:09 +08:00
/*降版处理*/
//当前版本删除,剩下最高版本变为非锁定状态
2025-06-23 10:41:33 +08:00
void DataModelData::downgradeVersion()
{
ProjectData* pProject = qobject_cast<ProjectData*>(_parent);
QList<DPData*> modelList;
pProject->findDatamodelByName(_name, modelList);
if (modelList.size() == 0)
{
return;
}
DataModelData* pDest = qobject_cast<DataModelData*>(modelList.at(0));
for (int i = 1; i < modelList.size(); i++)
{
DataModelData* pCur = qobject_cast<DataModelData*>(modelList.at(i));
if (pCur->_version > pDest->_version)
{
pDest = pCur;
}
}
pDest->_isVerLocked = 0;
pDest->saveSelf();
}
2025-06-23 18:01:09 +08:00
/*从数据库中删除当前数据*/
2025-06-23 10:41:33 +08:00
bool DataModelData::deleteSelf()
{
if (_pDBDAO)
{
DBPlatformSpace::ResultMsg rm = _pDBDAO->delself();
if (rm.rCode == 0)
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.delself success");
if (_parent)
{
2025-06-23 18:01:09 +08:00
//数据库删除成功,从内存项目中删除该数据模型
2025-06-23 10:41:33 +08:00
_parent->deleteChild(_id);
removeChildinDPMap();
2025-06-23 18:01:09 +08:00
//处理降版问题
2025-06-23 10:41:33 +08:00
downgradeVersion();
return true;
}
else
{
//_parent = Null
2025-06-23 18:01:09 +08:00
LOG(ERROR) << CommonHelper::utf8ToStdString("DataModelData.parent 为null ");
2025-06-23 10:41:33 +08:00
return false;
}
}
else
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.delself failed");
LOG(ERROR) << rm.rMsg;
2025-06-23 18:01:09 +08:00
//从数据库删除失败
2025-06-23 10:41:33 +08:00
return false;
}
}
else
{
2025-06-23 18:01:09 +08:00
//_pDBDAO为空
2025-06-23 10:41:33 +08:00
return false;
}
}
2025-06-23 18:01:09 +08:00
/*升版*/
2025-06-23 10:41:33 +08:00
bool DataModelData::upgradeVersion(DataModelData*& pNew)
{
using namespace DBPlatformSpace;
ResultMsg rm;
if (_pDBDAO)
{
M_EntityModelDAO* pNewModelDAO = dynamic_cast<M_EntityModelDAO*>(pNew->_pDBDAO);
if (!pNewModelDAO)
{
pNewModelDAO = new M_EntityModelDAO();
}
M_EntityModelDAO* pModelDAO = dynamic_cast<M_EntityModelDAO*>(_pDBDAO);
// int newVersionModelId = 0;
rm = pModelDAO->upgradeNewVersion(pNewModelDAO);
if (rm.rCode == 0)
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.upgradeNewVersion success");
2025-06-23 18:01:09 +08:00
//给新数据模型赋值
2025-06-23 10:41:33 +08:00
pNew->loadData(pNewModelDAO);
2025-06-23 18:01:09 +08:00
//升版后原模型需要锁定
2025-06-23 10:41:33 +08:00
this->_isVerLocked = pModelDAO->_isVersionLocked;
return true;
}
else
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.upgradeNewVersion failed");
LOG(ERROR) << rm.rMsg;
return false;
}
}
return false;
}
2025-06-23 18:01:09 +08:00
/*实例生成*/
2025-06-23 10:41:33 +08:00
bool DataModelData::createInstance(QString& msg)
{
using namespace DBPlatformSpace;
ResultMsg rm;
2025-06-23 18:01:09 +08:00
//选择生成实例文件全路径
QString file = QFileDialog::getSaveFileName(nullptr, tr("保存实例文件"), "", "", nullptr, QFileDialog::DontConfirmOverwrite);
2025-06-23 10:41:33 +08:00
if (file.isEmpty())
{
2025-06-23 18:01:09 +08:00
msg = "未选择实例文件路径";
2025-06-23 10:41:33 +08:00
return false;
}
QFileInfo selectFile(file);
if (selectFile.isFile() )
{
2025-06-23 18:01:09 +08:00
//文件存在
msg = "文件已存在,请重新命名!";
2025-06-23 10:41:33 +08:00
return false;
}
2025-06-23 18:01:09 +08:00
//分别获取路径与文件名
2025-06-23 10:41:33 +08:00
int pos = file.lastIndexOf("/");
QString path = file.left(pos);
QString name = file.right(file.size() - pos - 1);
2025-06-23 18:01:09 +08:00
//检查文件是否重名
2025-06-23 10:41:33 +08:00
QFileInfoList filelist;
QDir dir(path);
for each (QFileInfo info in dir.entryInfoList(QDir::Files))
{
filelist.append(info);
}
if (_pDBDAO)
{
M_EntityModelDAO* pModel = dynamic_cast<M_EntityModelDAO*>(_pDBDAO);
rm = pModel->createInstance(CommonHelper::qstringToStdString(path), CommonHelper::qstringToStdString(name));
if (rm.rCode == 0)
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.createInstance success");
return true;
}
else
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.createInstance failed");
LOG(ERROR) << rm.rMsg;
2025-06-23 18:01:09 +08:00
msg = "生成实例文件失败";
2025-06-23 10:41:33 +08:00
return false;
}
}
2025-06-23 18:01:09 +08:00
msg = "程序出错,请查看日志";
2025-06-23 10:41:33 +08:00
LOG(ERROR) << "createInstance: _pDBDAO is null";
return false;
}
2025-06-23 18:01:09 +08:00
/*复制数据模型*/
2025-06-23 10:41:33 +08:00
bool DataModelData::copyData(DataModelData*& pNew, json& parameter)
{
auto data = parameter["data"];
using namespace DBPlatformSpace;
ResultMsg rm;
M_EntityModelDAO* pModelDAO = dynamic_cast<M_EntityModelDAO*>(_pDBDAO);
if (pModelDAO)
{
M_EntityModelDAO* pNewModelDAO = dynamic_cast<M_EntityModelDAO*>(pNew->_pDBDAO);
if (!pNewModelDAO)
{
pNewModelDAO = new M_EntityModelDAO();
}
2025-06-23 18:01:09 +08:00
//给新数据模型确定名称标识
QString newDisplayName = _displayName + "_[" + QString::number(_version) + "]" + "复制";
//进行显示名称重名验证,若有重名,加序号
2025-06-23 10:41:33 +08:00
int nameId = 0;
QString newName = newDisplayName;
while (isDuplicatName(newName, "displayName"))
{
nameId += 1;
newName = newDisplayName + QString::number(nameId);
}
pNewModelDAO->_displayName = CommonHelper::qstringToStdString(newName);
2025-06-23 18:01:09 +08:00
//名称标识重名判断
2025-06-23 10:41:33 +08:00
QString nameFlag;
if (!data["label"].is_null())
{
nameFlag = CommonHelper::utf8ToQString(data["label"]);
}
if (nameFlag.isEmpty())
{
2025-06-23 18:01:09 +08:00
//如果为空,自动处理加上
2025-06-23 10:41:33 +08:00
nameFlag = _name;
int nameId = 0;
newName = nameFlag;
while (isDuplicatName(newName, "name"))
{
nameId += 1;
newName = nameFlag + QString::number(nameId);
}
pNewModelDAO->_name = CommonHelper::qstringToStdString(newName);
}
rm = pModelDAO->copyTo(pNewModelDAO);
if (rm.rCode == 0)
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.copyTo success");
2025-06-23 18:01:09 +08:00
//给新数据模型赋值
2025-06-23 10:41:33 +08:00
pNew->loadData(pNewModelDAO);
_parent->_childrenMap.insert(pNew->_id, pNew);
return true;
}
else
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.copyTo failed");
LOG(ERROR) << rm.rMsg;
return false;
}
}
else
{
2025-06-23 18:01:09 +08:00
//为空?
2025-06-23 10:41:33 +08:00
return false;
}
}
void DataModelData::toJson(json& jsonObj, bool /*recursive*/)
{
jsonObj["id"] = _id;
jsonObj["name"] = CommonHelper::qstringToUtf8(_displayName);
jsonObj["type"] = _type;
jsonObj["identification"] = CommonHelper::qstringToUtf8(_name);
jsonObj["description"] = CommonHelper::qstringToUtf8(_description);
jsonObj["version"] = _version;
jsonObj["locked"] = _isVerLocked;
jsonObj["deleted"] = _isDeleted;
jsonObj["published"] = _isReleased;
jsonObj["createTime"] = CommonHelper::qstringToUtf8(getCreateTime());
jsonObj["updateTime"] = CommonHelper::qstringToUtf8(getUpdateTime());
jsonObj["classType"] = g_TYPE_DATAMODEL;
}
void DataModelData::removeChildinDPMap()
{
DataManager& mgr = GetDataRoot();
QMap<unsigned int, DPData*>::iterator it = _childrenMap.begin();
while (it != _childrenMap.end())
{
mgr.deleteInDataMap(DataManager::DataType::dataPack, (*it)->_id);
qobject_cast<DataPack*>(*it)->removeChildinDPMap();
it++;
}
}
2025-06-23 18:01:09 +08:00
//获取所有数据,数据模型数据树
2025-06-23 10:41:33 +08:00
void DataModelData::getAllChildren(DPData* pManager, bool reload)
{
using namespace DBPlatformSpace;
ResultMsg rm;
DataManager* pMng = qobject_cast<DataManager*>(pManager);
2025-06-23 18:01:09 +08:00
//重新加载
2025-06-23 10:41:33 +08:00
if (reload)
{
removeChildinDPMap();
qDeleteAll(_childrenMap);
_childrenMap.clear();
_initChildren = false;
}
if (_initChildren)
{
return;
}
M_EntityModelDAO* pMoldeDAO = dynamic_cast<M_EntityModelDAO*>(_pDBDAO);
2025-06-23 18:01:09 +08:00
//获取所有根数据模块
2025-06-23 10:41:33 +08:00
list<M_FolderDAO*> listDataPack;
rm = pMoldeDAO->getRootM_FolderDAOList(listDataPack);
if (rm.rCode != 0)
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.getRootM_FolderDAOList failed");
LOG(ERROR) << rm.rMsg;
return;
}
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.getRootM_FolderDAOList success");
_initChildren = true;
for (list<M_FolderDAO*>::iterator it = listDataPack.begin(); it != listDataPack.end(); ++it)
{
DataPack* pNew = new DataPack();
pNew->loadData(*it);
pNew->_parent = this;
pNew->_bIsChildPack = false;
_childrenMap.insert(pNew->_id, pNew);
2025-06-23 18:01:09 +08:00
//加入数据map
2025-06-23 10:41:33 +08:00
pMng->insertDataMap(DataManager::DataType::dataPack, pNew->_id, pNew);
2025-06-23 18:01:09 +08:00
//取下层子模块
2025-06-23 10:41:33 +08:00
pNew->getAllChildren(pMng);
}
}
void DataModelData::getNewProperty(json& parameter, QVariantMap& values)
{
2025-06-23 18:01:09 +08:00
//所有能通过参数进来的属性
2025-06-23 10:41:33 +08:00
//name des type
auto data = parameter["data"];
auto type = data["type"];
if (!data["name"].is_null())
{
values.insert("displayName", CommonHelper::utf8ToQString(data["name"]));
}
if (!data["type"].is_null())
{
values.insert("type", (int)data["type"]);
}
if (!data["description"].is_null())
{
values.insert("description", CommonHelper::utf8ToQString(data["description"]));
}
if (!data["identification"].is_null())
2025-06-23 18:01:09 +08:00
{ //名称标识
2025-06-23 10:41:33 +08:00
values.insert("name", CommonHelper::utf8ToQString(data["identification"]));
}
}
void DataModelData::setNewData(json& parameter)
{
2025-06-23 18:01:09 +08:00
//当前时间
2025-06-23 10:41:33 +08:00
QString curTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm");
QVariantMap valueMap;
getNewProperty(parameter, valueMap);
valueMap.insert("createTime", curTime);
valueMap.insert("updateTime", curTime);
2025-06-23 18:01:09 +08:00
//保存属性
2025-06-23 10:41:33 +08:00
setProperties(valueMap);
}
void DataModelData::setEditData(json& parameter)
{
2025-06-23 18:01:09 +08:00
//当前时间
2025-06-23 10:41:33 +08:00
QString curTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm");
QVariantMap valueMap;
getNewProperty(parameter, valueMap);
valueMap.insert("updateTime", curTime);
setProperties(valueMap);
}
// bool DataModelData::isDuplicateDisplayName(QString name)
// {
2025-06-23 18:01:09 +08:00
// //看是否有重名的数据模型如果有相同的显示名称则返回true.无重名则返回false
// //获取根结点
2025-06-23 10:41:33 +08:00
// DataManager* pManager = qobject_cast<DataManager*>(_parent->_parent);
// QMap<unsigned int, DPData*>::iterator it;
// QMap<unsigned int, DPData*> modelMap;
// pManager->getDataMap(DataManager::DataType::dataModel,modelMap);
// it = modelMap.begin();
// while (it != modelMap.end())
// {
// DataModelData* pModelData = qobject_cast<DataModelData*>(*it);
// if (pModelData->_displayName == name)
// {
// return true;
// }
// it++;
// }
// return false;
// }
2025-06-23 18:01:09 +08:00
//在同一项目中 名称/显示名称 是否重复
2025-06-23 10:41:33 +08:00
bool DataModelData::isDuplicatName(QString name, QString propertyName)
{
// ProjectData* pManager = qobject_cast<ProjectData*>(_parent);
QMap<unsigned int, DPData*>::iterator it;
it = _parent->_childrenMap.begin();
while (it != _parent->_childrenMap.end())
{
QString n = (*it)->property(CommonHelper::qstringToString(propertyName)).toString();
if (n == name)
{
return true;
}
it++;
}
return false;
}
void DataModelData::takeRelationTableName()
{
DataManager& mgr = GetDataRoot();
2025-06-23 18:01:09 +08:00
//mn关系通过关系类
2025-06-23 10:41:33 +08:00
QMap<unsigned int, DPData*> classMap;
mgr.getDataMap(DataManager::DataType::dataClass, classMap);
QList<unsigned int> keylist = classMap.keys();
for (int i = 0; i < keylist.size(); i++)
{
DataClass* pData = qobject_cast<DataClass*>(classMap.value(keylist.at(i)));
if (pData->_type == g_RELATED_CLASS)
{
if (pData->getDataModelOwner()->_id == _id)
{
QString mnRelName = pData->_name.right(pData->_name.size() - 3);
2025-06-23 18:01:09 +08:00
//"_"的位置
2025-06-23 10:41:33 +08:00
int pos = mnRelName.indexOf("_");
2025-06-23 18:01:09 +08:00
//主类名
2025-06-23 10:41:33 +08:00
QString mainClassName = mnRelName.left(pos);
DPData* pMain = nullptr;
while (!pMain)
{
pMain = mgr.findobjectByNameInDatamodel(g_RELATED_CLASS, "name", mainClassName, _id);
if (pMain)
{
break;
}
2025-06-23 18:01:09 +08:00
pos = mnRelName.indexOf("_", pos + 1); //查找下一个
2025-06-23 10:41:33 +08:00
if (pos == -1)
{
return;
}
mainClassName = mnRelName.left(pos);
}
QString subName = mnRelName.right(mnRelName.size() - pos - 1);
DataClass* pSubClass = qobject_cast<DataClass*>(mgr.findobjectByNameInDatamodel(g_RELATED_CLASS, "name", subName, _id));
if (pSubClass)
{
qobject_cast<DataClass*>(pMain)->_fkTableName.append(pSubClass->_strDisplayName);
qobject_cast<DataClass*>(pMain)->_relTableName.append(pData->_strDisplayName);
qobject_cast<DataClass*>(pMain)->_fkTypeName.append("m:n");
pSubClass->_fkTableName.append(qobject_cast<DataClass*>(pMain)->_strDisplayName);
pSubClass->_relTableName.append(pData->_strDisplayName);
pSubClass->_fkTypeName.append("m:n");
}
}
}
}
2025-06-23 18:01:09 +08:00
//其它关系
2025-06-23 10:41:33 +08:00
QMap<unsigned int, DPData*> attributeMap;
mgr.getDataMap(DataManager::DataType::dataAttribute, attributeMap);
keylist = attributeMap.keys();
for (int i = 0; i < keylist.size(); i++)
{
QString rel;
DataAttribute* pData = qobject_cast<DataAttribute*>(attributeMap.value(keylist.at(i)));
if (pData->_FKType != 0)
{
if (pData->_FKType == RELATION_11)
{
rel = "1:1";
}
else if (pData->_FKType == RELATION_1N)
{
rel = "1:n/n:1";
}
2025-06-23 18:01:09 +08:00
//查找关系类
2025-06-23 10:41:33 +08:00
DataClass* pRelClass = qobject_cast<DataClass*>(mgr.findObjectById(DataManager::DataType::dataClass, pData->_wFkTableID));
if (pRelClass)
{
qobject_cast<DataClass*>(pData->_parent)->_fkTypeName.append(rel);
qobject_cast<DataClass*>(pData->_parent)->_fkTableName.append(pRelClass->_strDisplayName);
qobject_cast<DataClass*>(pData->_parent)->_relTableName.append(" ");
pRelClass->_fkTypeName.append(rel);
pRelClass->_fkTableName.append(qobject_cast<DataClass*>(pData->_parent)->_strDisplayName);
pRelClass->_relTableName.append(" ");
}
}
}
}
void DataModelData::setFileData(FileGenerate* generator, QStringList qs)
{
2025-06-23 18:01:09 +08:00
//封面
2025-06-23 10:41:33 +08:00
generator->CoverRightItem.append(new CCS_Report::CCSModelDataSet("", "v" + QString::number(_version)));
/*QList<QObject*> ModelItem;*/
generator->ModelItem.append(new CCS_Report::CCSModelDataSet(_parent->_name, _displayName));
takeRelationTableName();
QMap<unsigned int, DPData*>::iterator it = _childrenMap.begin();
int id = 0;
QStringList flaglist;
flaglist << QString::number(id);
while (it != _childrenMap.end())
{
flaglist.replace(0, QString::number(id));
(*it)->setFileData(generator, flaglist);
id++;
it++;
}
}