From e9bc2d6945d4d3e7f4749b29bfa9d2e5b26ddd30 Mon Sep 17 00:00:00 2001 From: MALFREYT <alexandre.malfreyt@synchrotron-soleil.fr> Date: Wed, 23 Apr 2025 14:30:03 +0200 Subject: [PATCH] refactor: improve clarity by removing redundancy in get_device_property() for default properties values --- src/SingleShotAO.cpp | 69 ++++++++++++++++++++++++-------------------- src/SingleShotAO.h | 20 +++++++++++-- 2 files changed, 56 insertions(+), 33 deletions(-) diff --git a/src/SingleShotAO.cpp b/src/SingleShotAO.cpp index b90b3c5..d56848a 100755 --- a/src/SingleShotAO.cpp +++ b/src/SingleShotAO.cpp @@ -671,6 +671,7 @@ void SingleShotAO::get_device_property() dev_prop.push_back(Tango::DbDatum("EnableRamps")); dev_prop.push_back(Tango::DbDatum("OutputMemorizedChannelsAtInit")); + // Call database and extract values //-------------------------------------------- if (Tango::Util::instance()->_UseDb==true) @@ -689,23 +690,31 @@ void SingleShotAO::get_device_property() else { // Try to initialize BoardNum from default device value def_prop = ds_class->get_default_device_property(dev_prop[i].name); - if (def_prop.is_empty()==false) def_prop >> boardNum; + if (def_prop.is_empty() == false) + { + def_prop >> boardNum_default; + def_prop >> boardNum; + } } // And try to extract BoardNum value from database - if (dev_prop[i].is_empty()==false) dev_prop[i] >> boardNum; + if (dev_prop[i].is_empty() == false) dev_prop[i] >> boardNum; INFO_STREAM << "Raw BoardNum parsed: " << boardNum << endl; //- <BoardType> ----------------------- // Try to initialize BoardType from class property cl_prop = ds_class->get_class_property(dev_prop[++i].name); - if (cl_prop.is_empty()==false) cl_prop >> boardType; + if (cl_prop.is_empty() == false) cl_prop >> boardType; else { // Try to initialize BoardType from default device value def_prop = ds_class->get_default_device_property(dev_prop[i].name); - if (def_prop.is_empty()==false) def_prop >> boardType; + if (def_prop.is_empty() == false) + { + def_prop >> boardType_default; + def_prop >> boardType; + } } // And try to extract BoardType value from database - if (dev_prop[i].is_empty()==false) dev_prop[i] >> boardType; + if (dev_prop[i].is_empty() == false) dev_prop[i] >> boardType; INFO_STREAM << "Raw BoardType parsed: " << boardType << endl; //- <EnableRamps> ----------------------- @@ -715,7 +724,11 @@ void SingleShotAO::get_device_property() else { // Try to initialize EnableRamps from default device value def_prop = ds_class->get_default_device_property(dev_prop[i].name); - if (def_prop.is_empty() == false) def_prop >> enableRamps; + if (def_prop.is_empty() == false) + { + def_prop >> enableRamps_default; + def_prop >> enableRamps; + } } // And try to extract EnableRamps value from database if (dev_prop[i].is_empty() == false) dev_prop[i] >> enableRamps; @@ -728,40 +741,38 @@ void SingleShotAO::get_device_property() else { // Try to initialize OutputMemorizedChannelsAtInit from default device value def_prop = ds_class->get_default_device_property(dev_prop[i].name); - if (def_prop.is_empty() == false) def_prop >> outputMemorizedChannelsAtInit; + if (def_prop.is_empty() == false) + { + def_prop >> outputMemorizedChannelsAtInit_default; + def_prop >> outputMemorizedChannelsAtInit; + } } // And try to extract OutputMemorizedChannelsAtInit value from database if (dev_prop[i].is_empty() == false) dev_prop[i] >> outputMemorizedChannelsAtInit; INFO_STREAM << "OutputMemorizedChannelsAtInit parsed: " << (outputMemorizedChannelsAtInit ? "true" : "false") << endl; + // Create properties if empty and set default values //-------------------------------------------- DEBUG_STREAM << "Creating properties if empty" << endl; - // boardNum, boardType, enableRamps and outputMemorizedChannelsAtInit variables - // contain the default values at this point if the properties are not set in the database. - yat4tango::PropertyHelper::create_property_if_empty(this, dev_prop, boardNum, "BoardNum"); - yat4tango::PropertyHelper::create_property_if_empty(this, dev_prop, boardType, "BoardType"); - yat4tango::PropertyHelper::create_property_if_empty(this, dev_prop, enableRamps, "EnableRamps"); - yat4tango::PropertyHelper::create_property_if_empty(this, dev_prop, outputMemorizedChannelsAtInit, "OutputMemorizedChannelsAtInit"); + yat4tango::PropertyHelper::create_property_if_empty(this, dev_prop, boardNum_default, "BoardNum"); + yat4tango::PropertyHelper::create_property_if_empty(this, dev_prop, boardType_default, "BoardType"); + yat4tango::PropertyHelper::create_property_if_empty(this, dev_prop, enableRamps_default, "EnableRamps"); + yat4tango::PropertyHelper::create_property_if_empty(this, dev_prop, outputMemorizedChannelsAtInit_default, "OutputMemorizedChannelsAtInit"); + // Check critical properties being valid //-------------------------------------------- DEBUG_STREAM << "Checking if critical properties are valid:" << endl; critical_properties_missing = false; yat::OSStream errorMessages; - errorMessages << "\nCritical properties are missing or invalid:\n" << endl; + errorMessages << "Critical properties are missing or invalid:" << endl; //- <BoardNum> ----------------------- // Case 1 (error): boardNum is set to the default value in the database - // (compare the current value with the default value) - Tango::DbDatum &boardNumDatum = Tango::DbDatum("BoardNum"); - std::string defaultBoardNum_str; - def_prop = ds_class->get_default_device_property(boardNumDatum.name); - if (def_prop.is_empty() == false) def_prop >> defaultBoardNum_str; - Tango::DevShort defaultBoardNum = atoi(defaultBoardNum_str.c_str()); - if (boardNum == defaultBoardNum) - { - errorMessages << "Device property <BoardNum> is not set (default value " << defaultBoardNum << " needs to be replaced)" << endl; + if (boardNum == boardNum_default) + { + errorMessages << "Device property <BoardNum> is not set (default value " << boardNum_default << " needs to be replaced)" << endl; critical_properties_missing = true; } // Case 2 (error): boardNum is set to a value outside the valid range @@ -779,14 +790,9 @@ void SingleShotAO::get_device_property() //- <BoardType> ----------------------- // Case 1 (error): boardType is set to the default value in the database - // (compare the current value with the default value) - Tango::DbDatum &boardTypeDatum = Tango::DbDatum("BoardType"); - std::string defaultBoardType; - def_prop = ds_class->get_default_device_property(boardTypeDatum.name); - if (def_prop.is_empty() == false) def_prop >> defaultBoardType; - if (boardType == defaultBoardType) - { - errorMessages << "Device property <BoardType> is not set (default value " << defaultBoardType << " needs to be replaced)" << endl; + if (boardType == boardType_default) + { + errorMessages << "Device property <BoardType> is not set (default value " << boardType_default << " needs to be replaced)" << endl; critical_properties_missing = true; } // Case 2 (ok): boardType is set to a valid @@ -811,6 +817,7 @@ void SingleShotAO::get_device_property() critical_properties_missing = true; } + // If any critical property is missing or invalid, throw an exception if (critical_properties_missing) { diff --git a/src/SingleShotAO.h b/src/SingleShotAO.h index 17e2b74..2d680ca 100755 --- a/src/SingleShotAO.h +++ b/src/SingleShotAO.h @@ -121,10 +121,26 @@ public : //@} /** - * @name Device properties - * Device property member data. + * @name Device properties default values + * Device properties default values. */ //@{ +/** + * Default value for boardNum property + */ + Tango::DevShort boardNum_default; +/** + * Default value for boardType property + */ + string boardType_default; +/** + * Default value for enableRamps property + */ + Tango::DevBoolean enableRamps_default; +/** + * Default value for outputMemorizedChannelsAtInit property + */ + Tango::DevBoolean outputMemorizedChannelsAtInit_default; //@} /**@name Constructors -- GitLab