#include "jsonobject.h" #include #include #include #include #include #include #include #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 JsonObject::getIpAddrList() { QList 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& 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 JsonObject::getIpRouteList() { QList 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& 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(); }