572 lines
13 KiB
C++
572 lines
13 KiB
C++
#include "jsonobject.h"
|
|
|
|
#include <fstream>
|
|
#include <sstream>
|
|
#include <QDateTime>
|
|
#include <vector>
|
|
#include <QTranslator>
|
|
#include <QDebug>
|
|
#include <QApplication>
|
|
#include "json/cJSON.h"
|
|
const char* strProductFileName = "./cfgs/usct-product.json";
|
|
const char* strProductFileNameDefault = "./cfgs/usct-product";
|
|
JsonObject::JsonObject()
|
|
{
|
|
loadcfg();
|
|
|
|
}
|
|
JsonObject::~JsonObject()
|
|
{
|
|
savecfg();
|
|
|
|
|
|
}
|
|
void JsonObject::setJsonString(const char* catergory, const char* stringName, const char* stringValue, bool save)
|
|
{
|
|
if (!loadcfg())
|
|
return;
|
|
|
|
cJSON* first = cJSON_GetObjectItem((cJSON*)json_root, catergory);
|
|
if (!first) return;
|
|
|
|
cJSON* Item = cJSON_CreateString(stringValue);
|
|
cJSON* valItem = cJSON_GetObjectItem(first, stringName);
|
|
if (valItem){
|
|
cJSON_ReplaceItemInObject(first, stringName, Item);
|
|
}
|
|
else{
|
|
cJSON_AddItemToObject(first, stringName , Item);
|
|
}
|
|
if (save)
|
|
{
|
|
savecfg();
|
|
}
|
|
}
|
|
|
|
char* JsonObject::getJsonString(const char* catergory, const char* stringName)
|
|
{
|
|
if (!loadcfg())
|
|
return nullptr;
|
|
|
|
cJSON* first = cJSON_GetObjectItem((cJSON*)json_root, catergory);
|
|
if (!first) return nullptr;
|
|
|
|
cJSON* second = cJSON_GetObjectItem(first, stringName);
|
|
if (!second) return nullptr;
|
|
return second->valuestring;
|
|
|
|
}
|
|
|
|
void JsonObject::setBool(const char *catergory, const char *stringName, bool val, bool save) {
|
|
if (!loadcfg())
|
|
return;
|
|
|
|
cJSON* first = cJSON_GetObjectItem((cJSON*)json_root, catergory);
|
|
if (!first) return;
|
|
|
|
cJSON* Item = cJSON_CreateBool(val?1:0);
|
|
cJSON* valItem = cJSON_GetObjectItem(first, stringName);
|
|
if (valItem){
|
|
cJSON_ReplaceItemInObject(first, stringName, Item);
|
|
}
|
|
else{
|
|
cJSON_AddItemToObject(first, stringName , Item);
|
|
}
|
|
if (save)
|
|
{
|
|
savecfg();
|
|
}
|
|
}
|
|
|
|
bool JsonObject::getBool(const char* catergory, const char* stringName)
|
|
{
|
|
if (!loadcfg())
|
|
return false;
|
|
|
|
cJSON* first = cJSON_GetObjectItem((cJSON*)json_root, catergory);
|
|
if (!first) return false;
|
|
|
|
cJSON* second = cJSON_GetObjectItem(first, stringName);
|
|
if (!second) return false;
|
|
return second->valueint;
|
|
}
|
|
|
|
char* JsonObject::getArrayNode(const char* catergory, const char* stringName, int index, const char* id)
|
|
{
|
|
if (!loadcfg())
|
|
return nullptr;
|
|
|
|
cJSON* first = cJSON_GetObjectItem((cJSON*)json_root, catergory);
|
|
if (!first) return nullptr;
|
|
|
|
cJSON* second = cJSON_GetObjectItem(first, stringName);
|
|
if (!second) return nullptr;
|
|
|
|
cJSON* third = cJSON_GetArrayItem(second, index);
|
|
if (!third) return nullptr;
|
|
cJSON* fourth = cJSON_GetObjectItem(third, id);
|
|
|
|
if (!fourth) return nullptr;
|
|
return fourth->valuestring;
|
|
}
|
|
|
|
void JsonObject::setArrayNode(const char* catergory, const char* stringName, int index, const char* id, const char* stringValue)
|
|
{
|
|
if (!loadcfg())
|
|
return;
|
|
|
|
cJSON* first = cJSON_GetObjectItem((cJSON*)json_root, catergory);
|
|
if (!first) return;
|
|
|
|
cJSON* second = cJSON_GetObjectItem(first, stringName);
|
|
if (!second) return;
|
|
|
|
cJSON* third = cJSON_GetArrayItem(second, index);
|
|
if (!third) return;
|
|
cJSON* Item = cJSON_CreateString(stringValue);
|
|
cJSON_ReplaceItemInObject(third, id, Item);
|
|
}
|
|
|
|
|
|
int JsonObject::getArraySize(const char* catergory, const char* stringName)
|
|
{
|
|
if (!loadcfg())
|
|
return 0;
|
|
|
|
cJSON* first = cJSON_GetObjectItem((cJSON*)json_root, catergory);
|
|
if (!first) return 0;
|
|
|
|
cJSON* second = cJSON_GetObjectItem(first, stringName);
|
|
if (!second) return 0;
|
|
return cJSON_GetArraySize(second);
|
|
}
|
|
|
|
|
|
void JsonObject::setDefaultUser(const QString& str)
|
|
{
|
|
setJsonString("login", "defaultUser", str.toStdString().c_str());
|
|
}
|
|
QString JsonObject::defaultUser()
|
|
{
|
|
char* str = getJsonString("login", "defaultUser");
|
|
return QString(str);
|
|
}
|
|
QStringList JsonObject::protocals()
|
|
{
|
|
if (!loadcfg())
|
|
return QStringList();
|
|
|
|
cJSON* first = cJSON_GetObjectItem((cJSON*)json_root, "protocol");
|
|
if (!first) return QStringList();
|
|
|
|
cJSON* second = cJSON_GetObjectItem(first, "lists");
|
|
std::string lans = second->valuestring;
|
|
|
|
|
|
QString str = QString::fromLocal8Bit(QByteArray::fromRawData(lans.c_str(), lans.size()));
|
|
return str.split(";");
|
|
|
|
}
|
|
|
|
QString JsonObject::defaultProtocal()
|
|
{
|
|
char* str = getJsonString("protocol", "default");
|
|
return QString(str);
|
|
}
|
|
|
|
void JsonObject::setDefaultProtocal(const QString& str)
|
|
{
|
|
setJsonString("protocol", "default", str.toStdString().c_str());
|
|
}
|
|
|
|
QString JsonObject::defaultFilter()
|
|
{
|
|
char* str = getJsonString("worklistfilter", "default");
|
|
return QString(str);
|
|
}
|
|
void JsonObject::setDefaultFilter(const QString& str)
|
|
{
|
|
setJsonString("worklistfilter", "default", str.toStdString().c_str());
|
|
}
|
|
QStringList JsonObject::worklistFilters()
|
|
{
|
|
if (!loadcfg())
|
|
return QStringList();
|
|
|
|
cJSON* first = cJSON_GetObjectItem((cJSON*)json_root, "worklistfilter");
|
|
if (!first) return QStringList();
|
|
|
|
cJSON* second = cJSON_GetObjectItem(first, "lists");
|
|
|
|
|
|
std::string lans = second->valuestring;
|
|
QString str = QString::fromLocal8Bit(QByteArray::fromRawData(lans.c_str(), lans.size()));
|
|
return str.split(";");
|
|
|
|
}
|
|
|
|
|
|
|
|
QStringList JsonObject::language()
|
|
{
|
|
if (!loadcfg())
|
|
return QStringList();
|
|
|
|
cJSON* first = cJSON_GetObjectItem((cJSON*)json_root, "general");
|
|
if (!first) return QStringList();
|
|
|
|
cJSON* second = cJSON_GetObjectItem(first, "language");
|
|
if (!second) return QStringList();
|
|
|
|
std::string lans = second->valuestring;
|
|
QString str = QString::fromLocal8Bit(QByteArray::fromRawData(lans.c_str(), lans.size()));
|
|
return str.split(";");
|
|
|
|
}
|
|
|
|
void JsonObject::setDefaultLanguage(const QString& str)
|
|
{
|
|
setJsonString("general", "defaultlanguage", str.toStdString().c_str());
|
|
}
|
|
|
|
QString JsonObject::defaultLanguage()
|
|
{
|
|
char* str = getJsonString("general", "defaultlanguage");
|
|
return QString(str);
|
|
}
|
|
|
|
QString JsonObject::institutionName()
|
|
{
|
|
char* str = getJsonString("general", "institutionName");
|
|
return QString(str);
|
|
}
|
|
void JsonObject::setInstitutionName(const QString& str)
|
|
{
|
|
setJsonString("general", "institutionName", str.toStdString().c_str());
|
|
}
|
|
|
|
QString JsonObject::institutionAddr()
|
|
{
|
|
char* str = getJsonString("general", "institutionAddr");
|
|
return QString(str);
|
|
}
|
|
|
|
void JsonObject::setInstitutionAddr(const QString& str)
|
|
{
|
|
setJsonString("general", "institutionAddr", str.toStdString().c_str());
|
|
}
|
|
|
|
int JsonObject::lockerCount()
|
|
{
|
|
char* str = getJsonString("general", "lockscreen");
|
|
int interval = QString(str).toInt() * 1000;
|
|
return interval;
|
|
}
|
|
|
|
QString JsonObject::lockScreenTimeout()
|
|
{
|
|
char* str = getJsonString("general", "lockscreen");
|
|
return QString(str);
|
|
}
|
|
|
|
void JsonObject::setLockScreenTimeout(const QString& str)
|
|
{
|
|
setJsonString("general", "lockscreen", str.toStdString().c_str());
|
|
}
|
|
|
|
QString JsonObject::storageAlarmSize()
|
|
{
|
|
char* str = getJsonString("storagepolicy", "mininum");
|
|
return QString(str);
|
|
}
|
|
|
|
bool JsonObject::loadcfg()
|
|
{
|
|
if (m_bLoaded)
|
|
return true;
|
|
|
|
std::ifstream inFile(strProductFileName);
|
|
if (!inFile.is_open())
|
|
{
|
|
return loadcfgDefault();
|
|
}
|
|
std::stringstream ss;
|
|
ss << inFile.rdbuf();
|
|
std::string strJsonData = ss.str();
|
|
json_root = cJSON_Parse(strJsonData.c_str());
|
|
inFile.close();
|
|
|
|
|
|
if (!json_root)
|
|
return loadcfgDefault();
|
|
|
|
m_bLoaded = true;
|
|
return true;
|
|
}
|
|
|
|
|
|
bool JsonObject::loadcfgDefault()
|
|
{
|
|
|
|
std::ifstream inFile(strProductFileNameDefault);
|
|
if (!inFile.is_open())
|
|
{
|
|
return false;
|
|
}
|
|
std::stringstream ss;
|
|
ss << inFile.rdbuf();
|
|
std::string strJsonData = ss.str();
|
|
json_root = cJSON_Parse(strJsonData.c_str());
|
|
inFile.close();
|
|
|
|
if (!json_root)
|
|
return false;
|
|
|
|
m_bLoaded = true;
|
|
return true;
|
|
}
|
|
|
|
bool JsonObject::savecfg()
|
|
{
|
|
if (!m_bLoaded)
|
|
return false;
|
|
|
|
std::ofstream outFile(strProductFileName);
|
|
if (!outFile.is_open())
|
|
{
|
|
return false;
|
|
}
|
|
|
|
char* strJsonData = cJSON_Print((cJSON*)json_root);
|
|
std::stringstream ss;
|
|
ss << strJsonData;
|
|
outFile << ss.rdbuf();
|
|
outFile.close();
|
|
m_bLoaded = false;
|
|
return true;
|
|
}
|
|
|
|
host JsonObject::getServer(ServerType type)
|
|
{
|
|
QString typeName;
|
|
switch (type)
|
|
{
|
|
|
|
case JsonObject::WORKLIST:
|
|
typeName = "worklist";
|
|
break;
|
|
case JsonObject::PACS:
|
|
typeName = "pacs";
|
|
break;
|
|
case JsonObject::LOCAL:
|
|
typeName = "address";
|
|
break;
|
|
case JsonObject::RECON:
|
|
typeName = "recon";
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
host list;
|
|
list.ae = QString(getJsonString(typeName.toStdString().c_str(), "ae"));
|
|
list.ip = QString(getJsonString(typeName.toStdString().c_str(), "ip"));
|
|
list.name = QString(getJsonString(typeName.toStdString().c_str(), "name"));
|
|
list.port = QString(getJsonString(typeName.toStdString().c_str(), "port"));
|
|
return list;
|
|
}
|
|
|
|
void JsonObject::setServer(ServerType type, const host& list)
|
|
{
|
|
QString typeName;
|
|
switch (type)
|
|
{
|
|
|
|
case JsonObject::WORKLIST:
|
|
typeName = "worklist";
|
|
break;
|
|
case JsonObject::PACS:
|
|
typeName = "pacs";
|
|
break;
|
|
case JsonObject::LOCAL:
|
|
typeName = "address";
|
|
break;
|
|
case JsonObject::RECON:
|
|
typeName = "recon";
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
setJsonString(typeName.toStdString().c_str(), "ae", list.ae.toStdString().c_str(), false);
|
|
setJsonString(typeName.toStdString().c_str(), "ip", list.ip.toStdString().c_str(), false);
|
|
setJsonString(typeName.toStdString().c_str(), "name", list.name.toStdString().c_str(), false);
|
|
setJsonString(typeName.toStdString().c_str(), "port", list.port.toStdString().c_str(), false);
|
|
|
|
savecfg();
|
|
}
|
|
|
|
|
|
QString JsonObject::interfaceName()
|
|
{
|
|
return QString(getJsonString("address", "device"));
|
|
}
|
|
|
|
QString JsonObject::passWord()
|
|
{
|
|
return tmp_psw;
|
|
}
|
|
|
|
void JsonObject::setPassword(const QString& pwd)
|
|
{
|
|
|
|
tmp_psw = pwd;
|
|
}
|
|
void JsonObject::setInterfaceName(const QString& name)
|
|
{
|
|
setJsonString("address", "device", name.toStdString().c_str());
|
|
}
|
|
|
|
bool JsonObject::isDHCP()
|
|
{
|
|
QVariant tempValue = QString(getJsonString("address", "dhcp"));
|
|
return tempValue.toBool();
|
|
}
|
|
|
|
void JsonObject::autoDHCP(bool ena)
|
|
{
|
|
QString str = QVariant(ena).toString();
|
|
setJsonString("address", "dhcp", str.toStdString().c_str());
|
|
}
|
|
|
|
IpAddr JsonObject::getDefaultIpAddr()
|
|
{
|
|
IpAddr obj;
|
|
//lhost.ip = IPConfig::getDeviceIP();
|
|
obj.ip = QString(getJsonString("address", "ip"));
|
|
obj.mask = QString(getJsonString("address", "mask"));
|
|
return obj;
|
|
}
|
|
|
|
void JsonObject::setDefaultIpAddr(const IpAddr& addr)
|
|
{
|
|
setJsonString("address", "ip", addr.ip.toStdString().c_str());
|
|
setJsonString("address", "mask", addr.mask.toStdString().c_str());
|
|
}
|
|
|
|
QList<QStringList> JsonObject::getIpAddrList()
|
|
{
|
|
|
|
QList<QStringList> obj;
|
|
int size = getArraySize("address", "additional");
|
|
for (int i = 0; i < size; i++)
|
|
{
|
|
QStringList temp;
|
|
char* ip_str = getArrayNode("address", "additional", i, "ip");
|
|
char* mask_str = getArrayNode("address", "additional", i, "netmask");
|
|
|
|
temp << ip_str << mask_str;
|
|
obj.push_back(temp);
|
|
}
|
|
return obj;
|
|
}
|
|
|
|
void JsonObject::setIpAddrList(const QList<QStringList>& list)
|
|
{
|
|
for (int i = 0; i < list.size(); i++) {
|
|
setArrayNode("address", "additional", i, "ip", list.at(i)[0].toStdString().c_str());
|
|
setArrayNode("address", "additional", i, "netmask", list.at(i)[1].toStdString().c_str());
|
|
}
|
|
savecfg();
|
|
}
|
|
|
|
QString JsonObject::getDefaultGateway()
|
|
{
|
|
return QString(getJsonString("routing", "defaultgateway"));
|
|
}
|
|
|
|
void JsonObject::setDefaultGateway(const QString& gw)
|
|
{
|
|
setJsonString("routing", "defaultgateway", gw.toStdString().c_str());
|
|
}
|
|
|
|
QList<QStringList> JsonObject::getIpRouteList()
|
|
{
|
|
QList<QStringList> obj;
|
|
int size = getArraySize("routing", "routingtable");
|
|
for (int i = 0; i < size; i++)
|
|
{
|
|
QStringList temp;
|
|
char* des_str = getArrayNode("routing", "routingtable", i, "destination");
|
|
char* gw_str = getArrayNode("routing", "routingtable", i, "gateway");
|
|
char* nm_str = getArrayNode("routing", "routingtable", i, "netmask");
|
|
|
|
temp << des_str << nm_str << gw_str;
|
|
obj.push_back(temp);
|
|
}
|
|
return obj;
|
|
}
|
|
|
|
void JsonObject::setIpRouteList(const QList<QStringList>& list)
|
|
{
|
|
for (int i = 0; i < list.size(); i++) {
|
|
setArrayNode("routing", "routingtable", i, "destination", list.at(i)[0].toStdString().c_str());
|
|
setArrayNode("routing", "routingtable", i, "netmask", list.at(i)[1].toStdString().c_str());
|
|
setArrayNode("routing", "routingtable", i, "gateway", list.at(i)[2].toStdString().c_str());
|
|
}
|
|
savecfg();
|
|
}
|
|
|
|
void JsonObject::setEmptyScanID(const char *id) {
|
|
setJsonString("deviceparam","EmptyScanID",id, true);
|
|
}
|
|
|
|
const char *JsonObject::getEmptyScanID() {
|
|
return getJsonString("deviceparam","EmptyScanID");
|
|
}
|
|
|
|
bool JsonObject::getScanConfirm() {
|
|
return getBool("general","ScanConfirm");
|
|
}
|
|
|
|
void JsonObject::setScanConfirm(bool val) {
|
|
setBool("general","ScanConfirm", val, true);
|
|
}
|
|
|
|
bool JsonObject::getCompleteNotify() {
|
|
return getBool("general","CompleteNotify");
|
|
}
|
|
|
|
void JsonObject::setCompleteNotify(bool val) {
|
|
setBool("general","CompleteNotify", val, true);
|
|
}
|
|
|
|
bool JsonObject::getAnonymousMode()
|
|
{
|
|
return getBool("general","AnonymousMode");
|
|
}
|
|
|
|
void JsonObject::setAnonymousMode(bool val)
|
|
{
|
|
setBool("general","AnonymousMode", val, true);
|
|
}
|
|
|
|
QStringList JsonObject::getScreenSaverInfomation()
|
|
{
|
|
return QString(getJsonString("screensaver", "content")).split(";");
|
|
}
|
|
|
|
|
|
bool JsonObject::isDmsSimulator()
|
|
{
|
|
return getBool("dms","simulator");
|
|
}
|
|
|
|
int JsonObject::getOperationLogExpireDays()
|
|
{
|
|
return QString(getJsonString("operatorlog", "expire")).toInt();
|
|
}
|
|
|
|
int JsonObject::getPatientListExpireDays()
|
|
{
|
|
return QString(getJsonString("patientlist", "expire")).toInt();
|
|
}
|