208 lines
4.5 KiB
C++
208 lines
4.5 KiB
C++
#pragma execution_character_set("utf-8")
|
||
|
||
#include "DataManager.h"
|
||
#include "M_ProjectDAO.h"
|
||
#include "ProjectData.h"
|
||
#include "global.h"
|
||
#include "DictItem.h"
|
||
#include "DictData.h"
|
||
|
||
|
||
DataManager& GetDataRoot()
|
||
{
|
||
static DataManager dataMgr;
|
||
return dataMgr;
|
||
}
|
||
|
||
DataManager::DataManager()
|
||
{
|
||
// pTheDBPlatform = new DBPlatformSpace::DBPlatformNew();
|
||
|
||
platformData.insert(DataType::project, mapProject);
|
||
platformData.insert(DataType::dataModel, mapDataModel);
|
||
platformData.insert(DataType::dataPack, mapDataPack);
|
||
platformData.insert(DataType::dataClass, mapDataClass);
|
||
platformData.insert(DataType::dataAttribute, mapDataAttribute);
|
||
}
|
||
|
||
DataManager::~DataManager()
|
||
{
|
||
if (pTheDBPlatform)
|
||
{
|
||
delete pTheDBPlatform;
|
||
pTheDBPlatform = nullptr;
|
||
}
|
||
// //清空最近打开项目
|
||
// while (!lastProject.isEmpty())
|
||
// {
|
||
// DPData* pdata = lastProject.back();
|
||
// delete pdata;
|
||
// pdata = nullptr;
|
||
// }
|
||
}
|
||
|
||
//添加一个下层数据对象
|
||
bool DataManager::addChild(DPData* pNewData)
|
||
{
|
||
//数据存入数据库
|
||
if (pNewData->saveSelf())
|
||
{
|
||
pNewData->_id = pNewData->_pDBDAO->_ID;
|
||
//保存成功
|
||
//添加数据到内存数据模型
|
||
_childrenMap.insert(pNewData->_id, pNewData);
|
||
//加入数据map
|
||
insertDataMap(DataType::project, pNewData->_id, pNewData);
|
||
return true;
|
||
}
|
||
else {
|
||
//保存失败
|
||
return false;
|
||
}
|
||
}
|
||
|
||
/*删除一个项目*/
|
||
bool DataManager::deleteChild(unsigned int id)
|
||
{
|
||
if (_childrenMap.remove(id))
|
||
{
|
||
return true;
|
||
}
|
||
return false;
|
||
|
||
}
|
||
|
||
|
||
/*获取所有下层数据对象*/
|
||
void DataManager::getAllChildren(DPData*, bool)
|
||
{
|
||
const int MINCOUNT = 2; //最多显示两个项目
|
||
using namespace DBPlatformSpace;
|
||
|
||
//获取所有的项目
|
||
std::list<M_ProjectDAO*> projectList;
|
||
ResultMsg rm = M_ProjectDAO::FindAll(projectList);
|
||
if (rm.rCode != 0)
|
||
{
|
||
LOG(INFO) << CommonHelper::utf8ToStdString("M_ProjectDAO::FindAll failed");
|
||
LOG(INFO) << rm.rMsg;
|
||
return;
|
||
}
|
||
LOG(INFO) << CommonHelper::utf8ToStdString("M_ProjectDAO::FindAll success");
|
||
//最近打开项目最多两个,如果只有一个显示一个
|
||
int listSize = static_cast<int>(projectList.size());
|
||
int lastCount = listSize> MINCOUNT ? MINCOUNT : listSize;
|
||
int addLastlist = 0;
|
||
lastProject.clear();
|
||
for (list<M_ProjectDAO*>::iterator it = projectList.begin(); it != projectList.end(); ++it)
|
||
{
|
||
ProjectData* pNew;
|
||
bool addto = false;
|
||
if (_childrenMap.contains((*it)->_ID))
|
||
{
|
||
pNew = qobject_cast<ProjectData*>(_childrenMap.value((*it)->_ID));
|
||
}
|
||
else
|
||
{
|
||
pNew = new ProjectData();
|
||
addto = true;
|
||
}
|
||
pNew->loadData(*it);
|
||
pNew->_parent = this;
|
||
if (addto)
|
||
{
|
||
_childrenMap.insert(pNew->_id, pNew);
|
||
insertDataMap(DataType::project, pNew->_id, pNew);
|
||
}
|
||
if (addLastlist < lastCount)
|
||
{
|
||
lastProject.append(pNew);
|
||
addLastlist++;
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
void DataManager::insertDataMap(DataType type, unsigned int id, DPData* pData)
|
||
{
|
||
platformData[type].insert(id, pData);
|
||
}
|
||
|
||
void DataManager::deleteInDataMap(DataType type, unsigned int id)
|
||
{
|
||
platformData[type].remove(id);
|
||
}
|
||
|
||
|
||
DPData* DataManager::findObjectById(DataType type, int id)
|
||
{
|
||
QMap<unsigned int, DPData*> map = platformData.value(type);
|
||
if (map.contains(id))
|
||
{
|
||
return platformData.value(type).value(id);
|
||
}
|
||
else
|
||
{
|
||
return nullptr;
|
||
}
|
||
}
|
||
|
||
//转换类型
|
||
DataManager::DataType DataManager::transformType(int type)
|
||
{
|
||
if (type == g_TYPE_DATAPACK)
|
||
{
|
||
return DataManager::DataType::dataPack;
|
||
}
|
||
else if (type == g_TYPE_DATACLASS)
|
||
{
|
||
return DataManager::DataType::dataClass;
|
||
}
|
||
else if (type == g_TYPE_DATAATTRUBUTE)
|
||
{
|
||
return DataManager::DataType::dataAttribute;
|
||
}
|
||
else if (type == g_TYPE_SCENEINFO)
|
||
{
|
||
return DataManager::DataType::scene;
|
||
}
|
||
}
|
||
|
||
//指定数据模型下,查找数据(type)的指定属性(名称或名称标识)值的数据
|
||
//返回同名数据
|
||
DPData* DataManager::findobjectByNameInDatamodel(int type, QString propertyName, QString name, int dataModelId)
|
||
{
|
||
//目标类型数据map
|
||
QMap<unsigned int, DPData*> dstDataMap = platformData.value(transformType(type));
|
||
QMap<unsigned int, DPData*>::iterator it = dstDataMap.begin();
|
||
while (it != dstDataMap.end())
|
||
{
|
||
QString vName = (*it)->property(CommonHelper::qstringToString(propertyName)).toString();
|
||
if (vName == name)
|
||
{
|
||
DPData* pData = *it;
|
||
//看是否是同一数据模型
|
||
if (pData->getDataModelOwner()->_id == dataModelId )
|
||
{
|
||
return (*it);
|
||
}
|
||
}
|
||
it++;
|
||
}
|
||
return nullptr;
|
||
}
|
||
|
||
void DataManager::getDataMap(DataType type, QMap<unsigned int, DPData*>& map)
|
||
{
|
||
map = platformData.value(type);
|
||
}
|
||
|
||
void DataManager::clearAllProject()
|
||
{
|
||
qDeleteAll(_childrenMap);
|
||
_childrenMap.clear();
|
||
}
|
||
|
||
|
||
|