aqhome-react: enable network loading.
This application has now basic functionality.
This commit is contained in:
@@ -39,11 +39,12 @@ static GWEN_XMLNODE *_readNetworkFromSysconfIntoXml(AQHOME_REACT *aqh, const cha
|
||||
static AQHREACT_UNIT_NET *_readUnitNetFromXml(AQHOME_REACT *aqh, GWEN_XMLNODE *unitNetNode);
|
||||
static GWEN_XMLNODE *_readUnitNetFileToXml(AQHOME_REACT *aqh, const char *sFilename);
|
||||
static void _readNetParamDefsWithList(AQHREACT_PARAM_LIST *paramList, GWEN_XMLNODE *unitNetNode);
|
||||
static int _readUnits(AQHOME_REACT *aqh, AQHREACT_UNIT_NET *unitNet, GWEN_XMLNODE *unitNetNode);
|
||||
static int _readUnits(AQHOME_REACT *aqh, AQHREACT_UNIT_NET *unitNet, GWEN_XMLNODE *unitNetNode, GWEN_DB_NODE *dbNetParams);
|
||||
static int _readLinks(AQHOME_REACT *aqh, AQHREACT_UNIT_NET *unitNet, GWEN_XMLNODE *unitNetNode);
|
||||
static AQHREACT_UNIT *_readUnit(AQHOME_REACT *aqh, GWEN_XMLNODE *unitNode);
|
||||
static int _readParamValuesForList(const AQHREACT_PARAM_LIST *paramList, GWEN_XMLNODE *parentNode);
|
||||
static int _readParamValueForList(const AQHREACT_PARAM_LIST *paramList, GWEN_XMLNODE *paramNode);
|
||||
static AQHREACT_UNIT *_readUnit(AQHOME_REACT *aqh, GWEN_XMLNODE *unitNode, GWEN_DB_NODE *dbNetParams);
|
||||
static int _readParamValuesForList(const AQHREACT_PARAM_LIST *paramList, GWEN_XMLNODE *parentNode, GWEN_DB_NODE *dbNetParams);
|
||||
static int _readParamValueForList(const AQHREACT_PARAM_LIST *paramList, GWEN_XMLNODE *paramNode, GWEN_DB_NODE *dbNetParams);
|
||||
static int _setParamDataFromString(AQHREACT_PARAM *param, const char *value);
|
||||
static AQHREACT_PARAM *_readNetParamDef(GWEN_XMLNODE *paramNode);
|
||||
static int _readLink(AQHOME_REACT *aqh, AQHREACT_UNIT_NET *unitNet, GWEN_XMLNODE *linkNode);
|
||||
static int _setParamDoubleValueFromString(AQHREACT_PARAM *param, const char *s);
|
||||
@@ -239,6 +240,7 @@ AQHREACT_UNIT_NET *_readUnitNetFromXml(AQHOME_REACT *aqh, GWEN_XMLNODE *unitNetN
|
||||
AQHREACT_UNIT_NET *unitNet;
|
||||
const char *s;
|
||||
int rv;
|
||||
GWEN_DB_NODE *dbNetParams=NULL;
|
||||
|
||||
unitNet=AQHREACT_UnitNet_new();
|
||||
s=GWEN_XMLNode_GetProperty(unitNetNode, "id", NULL);
|
||||
@@ -259,7 +261,7 @@ AQHREACT_UNIT_NET *_readUnitNetFromXml(AQHOME_REACT *aqh, GWEN_XMLNODE *unitNetN
|
||||
_readNetParamDefsWithList(AQHREACT_UnitNet_GetParamList(unitNet), baseNetXml);
|
||||
|
||||
/* also read netParams from this file (after reading from template) */
|
||||
rv=_readParamValuesForList(AQHREACT_UnitNet_GetParamList(unitNet), unitNetNode);
|
||||
rv=_readParamValuesForList(AQHREACT_UnitNet_GetParamList(unitNet), unitNetNode, NULL);
|
||||
if (rv<0) {
|
||||
DBG_INFO(NULL, "here (%d)", rv);
|
||||
AQHREACT_UnitNet_free(unitNet);
|
||||
@@ -267,9 +269,20 @@ AQHREACT_UNIT_NET *_readUnitNetFromXml(AQHOME_REACT *aqh, GWEN_XMLNODE *unitNetN
|
||||
return NULL;
|
||||
}
|
||||
|
||||
rv=_readUnits(aqh, unitNet, baseNetXml);
|
||||
dbNetParams=GWEN_DB_Group_new("params");
|
||||
rv=AQHREACT_Param_List_WriteIntoDb(AQHREACT_UnitNet_GetParamList(unitNet), dbNetParams, GWEN_DB_FLAGS_OVERWRITE_VARS);
|
||||
if (rv<0) {
|
||||
DBG_INFO(NULL, "here (%d)", rv);
|
||||
GWEN_DB_Group_free(dbNetParams);
|
||||
AQHREACT_UnitNet_free(unitNet);
|
||||
GWEN_XMLNode_free(baseNetXml);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
rv=_readUnits(aqh, unitNet, baseNetXml, dbNetParams);
|
||||
if (rv<0) {
|
||||
DBG_INFO(NULL, "here (%d)", rv);
|
||||
GWEN_DB_Group_free(dbNetParams);
|
||||
AQHREACT_UnitNet_free(unitNet);
|
||||
GWEN_XMLNode_free(baseNetXml);
|
||||
return NULL;
|
||||
@@ -278,19 +291,31 @@ AQHREACT_UNIT_NET *_readUnitNetFromXml(AQHOME_REACT *aqh, GWEN_XMLNODE *unitNetN
|
||||
rv=_readLinks(aqh, unitNet, baseNetXml);
|
||||
if (rv<0) {
|
||||
DBG_INFO(NULL, "here (%d)", rv);
|
||||
GWEN_DB_Group_free(dbNetParams);
|
||||
AQHREACT_UnitNet_free(unitNet);
|
||||
GWEN_XMLNode_free(baseNetXml);
|
||||
return NULL;
|
||||
}
|
||||
GWEN_DB_Group_free(dbNetParams);
|
||||
GWEN_XMLNode_free(baseNetXml);
|
||||
}
|
||||
else {
|
||||
/* just directly read network from given XML node (no need to load a template file) */
|
||||
_readNetParamDefsWithList(AQHREACT_UnitNet_GetParamList(unitNet), unitNetNode);
|
||||
|
||||
rv=_readUnits(aqh, unitNet, unitNetNode);
|
||||
dbNetParams=GWEN_DB_Group_new("params");
|
||||
rv=AQHREACT_Param_List_WriteIntoDb(AQHREACT_UnitNet_GetParamList(unitNet), dbNetParams, GWEN_DB_FLAGS_OVERWRITE_VARS);
|
||||
if (rv<0) {
|
||||
DBG_INFO(NULL, "here (%d)", rv);
|
||||
GWEN_DB_Group_free(dbNetParams);
|
||||
AQHREACT_UnitNet_free(unitNet);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
rv=_readUnits(aqh, unitNet, unitNetNode, dbNetParams);
|
||||
if (rv<0) {
|
||||
DBG_INFO(NULL, "here (%d)", rv);
|
||||
GWEN_DB_Group_free(dbNetParams);
|
||||
AQHREACT_UnitNet_free(unitNet);
|
||||
return NULL;
|
||||
}
|
||||
@@ -298,9 +323,11 @@ AQHREACT_UNIT_NET *_readUnitNetFromXml(AQHOME_REACT *aqh, GWEN_XMLNODE *unitNetN
|
||||
rv=_readLinks(aqh, unitNet, unitNetNode);
|
||||
if (rv<0) {
|
||||
DBG_INFO(NULL, "here (%d)", rv);
|
||||
GWEN_DB_Group_free(dbNetParams);
|
||||
AQHREACT_UnitNet_free(unitNet);
|
||||
return NULL;
|
||||
}
|
||||
GWEN_DB_Group_free(dbNetParams);
|
||||
}
|
||||
|
||||
return unitNet;
|
||||
@@ -336,7 +363,7 @@ GWEN_XMLNODE *_readUnitNetFileToXml(AQHOME_REACT *aqh, const char *sFilename)
|
||||
|
||||
|
||||
|
||||
int _readUnits(AQHOME_REACT *aqh, AQHREACT_UNIT_NET *unitNet, GWEN_XMLNODE *unitNetNode)
|
||||
int _readUnits(AQHOME_REACT *aqh, AQHREACT_UNIT_NET *unitNet, GWEN_XMLNODE *unitNetNode, GWEN_DB_NODE *dbNetParams)
|
||||
{
|
||||
GWEN_XMLNODE *nGroup;
|
||||
|
||||
@@ -348,7 +375,7 @@ int _readUnits(AQHOME_REACT *aqh, AQHREACT_UNIT_NET *unitNet, GWEN_XMLNODE *unit
|
||||
while(n) {
|
||||
AQHREACT_UNIT *unit;
|
||||
|
||||
unit=_readUnit(aqh, n);
|
||||
unit=_readUnit(aqh, n, dbNetParams);
|
||||
if (unit)
|
||||
AQHREACT_UnitNet_AddUnit(unitNet, unit);
|
||||
else {
|
||||
@@ -389,7 +416,7 @@ int _readLinks(AQHOME_REACT *aqh, AQHREACT_UNIT_NET *unitNet, GWEN_XMLNODE *unit
|
||||
|
||||
|
||||
|
||||
AQHREACT_UNIT *_readUnit(AQHOME_REACT *aqh, GWEN_XMLNODE *unitNode)
|
||||
AQHREACT_UNIT *_readUnit(AQHOME_REACT *aqh, GWEN_XMLNODE *unitNode, GWEN_DB_NODE *dbNetParams)
|
||||
{
|
||||
AQHREACT_UNIT *unit;
|
||||
const char *unitType;
|
||||
@@ -406,7 +433,7 @@ AQHREACT_UNIT *_readUnit(AQHOME_REACT *aqh, GWEN_XMLNODE *unitNode)
|
||||
unitId=GWEN_XMLNode_GetProperty(unitNode, "id", NULL);
|
||||
AQHREACT_Unit_SetId(unit, unitId);
|
||||
|
||||
rv=_readParamValuesForList(AQHREACT_Unit_GetParamList(unit), unitNode);
|
||||
rv=_readParamValuesForList(AQHREACT_Unit_GetParamList(unit), unitNode, dbNetParams);
|
||||
if (rv<0) {
|
||||
DBG_INFO(NULL, "here (%d)", rv);
|
||||
AQHREACT_Unit_free(unit);
|
||||
@@ -418,7 +445,7 @@ AQHREACT_UNIT *_readUnit(AQHOME_REACT *aqh, GWEN_XMLNODE *unitNode)
|
||||
|
||||
|
||||
|
||||
int _readParamValuesForList(const AQHREACT_PARAM_LIST *paramList, GWEN_XMLNODE *parentNode)
|
||||
int _readParamValuesForList(const AQHREACT_PARAM_LIST *paramList, GWEN_XMLNODE *parentNode, GWEN_DB_NODE *dbNetParams)
|
||||
{
|
||||
GWEN_XMLNODE *nGroup;
|
||||
|
||||
@@ -430,7 +457,7 @@ int _readParamValuesForList(const AQHREACT_PARAM_LIST *paramList, GWEN_XMLNODE *
|
||||
while(n) {
|
||||
int rv;
|
||||
|
||||
rv=_readParamValueForList(paramList, n);
|
||||
rv=_readParamValueForList(paramList, n, dbNetParams);
|
||||
if (rv<0) {
|
||||
DBG_INFO(NULL, "here (%d)", rv);
|
||||
return rv;
|
||||
@@ -443,7 +470,7 @@ int _readParamValuesForList(const AQHREACT_PARAM_LIST *paramList, GWEN_XMLNODE *
|
||||
|
||||
|
||||
|
||||
int _readParamValueForList(const AQHREACT_PARAM_LIST *paramList, GWEN_XMLNODE *paramNode)
|
||||
int _readParamValueForList(const AQHREACT_PARAM_LIST *paramList, GWEN_XMLNODE *paramNode, GWEN_DB_NODE *dbNetParams)
|
||||
{
|
||||
const char *paramName;
|
||||
|
||||
@@ -457,29 +484,35 @@ int _readParamValueForList(const AQHREACT_PARAM_LIST *paramList, GWEN_XMLNODE *p
|
||||
|
||||
value=GWEN_XMLNode_GetCharValue(paramNode, NULL, NULL);
|
||||
if (value && *value) {
|
||||
int dataType;
|
||||
|
||||
dataType=AQHREACT_Param_GetDataType(param);
|
||||
switch(dataType) {
|
||||
case AQHREACT_DATAOBJECTTYPE_DOUBLE:
|
||||
{
|
||||
int rv;
|
||||
double valueAsDouble;
|
||||
|
||||
rv=GWEN_Text_StringToDouble(value, &valueAsDouble);
|
||||
if (rv<0) {
|
||||
DBG_ERROR(NULL, "Not a DOUBLE value for param %s in list [%s]", paramName, value);
|
||||
return rv;
|
||||
}
|
||||
AQHREACT_Param_SetDoubleValue(param, valueAsDouble);
|
||||
break;
|
||||
if (dbNetParams) {
|
||||
GWEN_BUFFER *buf;
|
||||
int rv;
|
||||
|
||||
buf=GWEN_Buffer_new(0, 64, 0, 1);
|
||||
rv=GWEN_DB_ReplaceVars(dbNetParams, value, buf);
|
||||
if (rv<0) {
|
||||
DBG_ERROR(NULL, "Error replacing vars for param \"%s\" (%d)", paramName, rv);
|
||||
GWEN_Buffer_free(buf);
|
||||
return rv;
|
||||
}
|
||||
case AQHREACT_DATAOBJECTTYPE_STRING:
|
||||
default:
|
||||
AQHREACT_Param_SetStringValue(param, value);
|
||||
break;
|
||||
rv=_setParamDataFromString(param, GWEN_Buffer_GetStart(buf));
|
||||
if (rv<0) {
|
||||
DBG_ERROR(NULL, "Error setting param data for param \"%s\" (%d)", paramName, rv);
|
||||
GWEN_Buffer_free(buf);
|
||||
return rv;
|
||||
}
|
||||
GWEN_Buffer_free(buf);
|
||||
}
|
||||
}
|
||||
else {
|
||||
int rv;
|
||||
|
||||
rv=_setParamDataFromString(param, value);
|
||||
if (rv<0) {
|
||||
DBG_ERROR(NULL, "Error setting param data for param \"%s\" (%d)", paramName, rv);
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
} /* if value */
|
||||
}
|
||||
else {
|
||||
DBG_ERROR(NULL, "No param name \"%s\" in list", paramName);
|
||||
@@ -492,6 +525,37 @@ int _readParamValueForList(const AQHREACT_PARAM_LIST *paramList, GWEN_XMLNODE *p
|
||||
|
||||
|
||||
|
||||
int _setParamDataFromString(AQHREACT_PARAM *param, const char *value)
|
||||
{
|
||||
if (value && *value) {
|
||||
int dataType;
|
||||
|
||||
dataType=AQHREACT_Param_GetDataType(param);
|
||||
switch(dataType) {
|
||||
case AQHREACT_DATAOBJECTTYPE_DOUBLE:
|
||||
{
|
||||
int rv;
|
||||
double valueAsDouble;
|
||||
|
||||
rv=GWEN_Text_StringToDouble(value, &valueAsDouble);
|
||||
if (rv<0) {
|
||||
DBG_ERROR(NULL, "Not a DOUBLE value for param \"%s\" [%s]", AQHREACT_Param_GetName(param), value);
|
||||
return rv;
|
||||
}
|
||||
AQHREACT_Param_SetDoubleValue(param, valueAsDouble);
|
||||
break;
|
||||
}
|
||||
case AQHREACT_DATAOBJECTTYPE_STRING:
|
||||
default:
|
||||
AQHREACT_Param_SetStringValue(param, value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void _readNetParamDefsWithList(AQHREACT_PARAM_LIST *paramList, GWEN_XMLNODE *unitNetNode)
|
||||
{
|
||||
GWEN_XMLNODE *nGroup;
|
||||
|
||||
Reference in New Issue
Block a user