Select Git revision
-
Christine Kim authored
* Adds HRSC support in socetlinescankeywords (#5669) * Adds HRSC support in socetlinescankeywords * Add test cube * Fixed tests * Converted skypt to a callable app. Converted existing Makefile tests to gtests. Removed existing Makefile tests. (#5444) * Converted skypt to a callable app. Converted existing makefile tests to gtest format and removed old makefile tests and data. Addresses #5443. * Updated contributor list to add Sarah S. Sutton. Addresses #5443. --------- Co-authored-by:
Sarah Sutton <ssutton@dhcp-10-142-214-177.uawifi.arizona.edu> * Noseam has been refactored to be callable. Makefile test has been converted to a gtest and removed. (#5600) * Noseam has been refactored to be callable. Makefile test has been converted to a gtest and removed. Addresses #5599. * Modifications to address gtest failures. Also added addtional input parameter error checking to ensure noseam exits prior to generation of temporary files. Finally modified gtests to remove the print.prt file if generated. Addresses #5599. * The explode application has been refactored to be callable and Makefile test converted to a gtest. (#5590) * Updated explode application gtest to use DefaultCube fixture instead of cube in isis/tests/data. Addresses #5557. * Cleaned up includes in default explode gtest. Added history entry to explode.xml. Addresses #5557. * Updating main.cpp and removed Makefile tests for explode conversion to callable app. Addresses #5557. * Added CHANGELOG entry for conversion of explode app to callable function. Addresses #5557. --------- Co-authored-by:
Adam Paquette <acpaquette@usgs.gov> * Isisminer has been refactored to be callable and Makefile tests converted to gtest format (#5579) * Fixed minor misspellings in error messages. Addresses #5516. * Test data added for isisminer. Addresses #5516. * Converted isisminer Makefile tests to gtest format. Addresses #5516. * Converted isisminer application to callable function. Addresses #5516. * Minor tweak to isisminer csvwriter test. Addresses #5516. * Added compareCsvLineCustomDelimiter method, specifically for isisminer testing support. Addresses #5516. * Removed isisminer Makefile tests (replaced by gtests) and updated CHANGELOG reflecting conversion of isisminer to callable app. Addresses #5516. * Replace isis cube in /isis/tests/data/isisminer/gistest with isd and label files. Minor tweaks to FunctionalTestsIsisminer.cpp. History entry added to isisminer.xml. Addresses #5516. * Minor changes for conversion of isisminer to callable app. Addresses #5516. * Had to add data file index.lbl to the .gitignore file for it to be uploaded. Addresses #5516. * Algebra has been refactored to be callable; old Makefile tests have been converted to gtests and removed. Addresses #5594. (#5597) * Photrim has been refactored to be callable; old Makefile tests have been converted to gtests and removed. (#5582) * Photrim has been converted to a callable app. Corresponding Makefile tests have been converted to gtests and removed. Addresses #5581. * Tweaks to FunctionalTestsPhotrim.cpp. Addresses #5581. * Bandtrim has been refactored to be callable; old Makefile tests have been converted to gtests. (#5572) * Bandtrim has been refactored to be callable; old Makefile tests have been removed and replaced by gtests. Addresses #5571. * Update FunctionalTestsBandtrim.cpp Minor documentation change. * Updated kaguyasp2ascii to support newer (detached) data (#5568) * Modified to work with new (detached) data * Updated changelog * Allow data specification outside current directory * Jigsaw csm error message (#5562) * Added fail-early + error message for csminit'd images without csm solve parameters * Updated changelog * Bug fix in noproj to remove persistent temporary lbl file (#5578) * Added line to close match cube in noproj.cpp. Not closing the cube resulted in a temporary "*.lbl" file that remained after running the noproj application. Addresses #5577. * CHANGELOG entry for noproj bug fix. Addresses #5577. * Added history entry in noproj.xml. Addresses #5577. * Remove restrictive validity check in caminfo (#5553) * Removed preemptive validity check for polygon * Removed unused import * Updated changelog * Qview command line Fix (#5505) * Avoid double image load when opening cubes from cmdline in qview * Added changelog entry * Revert interval change * Change qt to qt-main * Update deps and pcl cmake * Add float.h * CsmSerialNumber.trn - typo and PVL compilant fix (#5561) * Fixed typo * PVL compliant * PR feedback changes * hrsc2isis support for level 3 images (#5560) * Remove label check for level3 * update changelog * fix test * addressed PR feedback * fixed grammar * Fixed gllssi2isis to support V1.1 data (#5570) * Removed a debug output statement inadvertently left in noseam.cpp. Addresses #5660. (#5661) * Bug fixes to address incorrect handling of RADIUS in the jigsaw GUI and in the bundleout.txt file when performing a rectangular (XYZ) bundle adjustment, originally implemented in UofA OSIRIS-REx code on 2019-07-30. Addresses #5642. (#5643) * The RADIUS checkbox in the GUI is excluded when a RECTANGULAR solution is selected. * In the bundleout.txt file, for rectangular solutions, 1) RADIUS is set to N/A in the SOLVE OPTIONS section; and 2) the POINTS UNCERTAINTY SECTION was fixed to properly display adjusted point uncertainty statistics with Error Propagation turned on. * Spacing for point labels was cleaned up in the INPUT: GLOBAL IMAGE PARAMETER UNCERTAINTIES section. * Finally, a slight modification was added to the FunctionalTestJigsawBundleXYZ ctest to verify that RADIUS is N/A in a RECTANGULAR solution. * Updated kaguyasp2ascii to support newer (detached) data (#5568) * Modified to work with new (detached) data * Updated changelog * Allow data specification outside current directory * Speeds up FunctionalTestCamstatsDefaultParameters (#5647) * speed up camstats * add changelog * fixes photomet not accepting backplanes (#5658) * fixes photomet not accepting backplanes * fix changelog * Converted to gtests * Add input cube attributes * Convert dstripe to gtests (#5665) * Convert dstripe to gtests * add changelog * Fixed build error * trigger build * trigger build * Update docs --------- Co-authored-by:
Amy Stamile <74275278+amystamile-usgs@users.noreply.github.com> Co-authored-by:
Sarah Sutton <ssutton@lpl.arizona.edu> Co-authored-by:
Sarah Sutton <ssutton@dhcp-10-142-214-177.uawifi.arizona.edu> Co-authored-by:
kledmundson <6842706+kledmundson@users.noreply.github.com> Co-authored-by:
Adam Paquette <acpaquette@usgs.gov> Co-authored-by:
Austin Sanders <arsanders@usgs.gov> Co-authored-by:
Shin-ya Murakami <86389420+murashinln@users.noreply.github.com>
Christine Kim authored* Adds HRSC support in socetlinescankeywords (#5669) * Adds HRSC support in socetlinescankeywords * Add test cube * Fixed tests * Converted skypt to a callable app. Converted existing Makefile tests to gtests. Removed existing Makefile tests. (#5444) * Converted skypt to a callable app. Converted existing makefile tests to gtest format and removed old makefile tests and data. Addresses #5443. * Updated contributor list to add Sarah S. Sutton. Addresses #5443. --------- Co-authored-by:
Sarah Sutton <ssutton@dhcp-10-142-214-177.uawifi.arizona.edu> * Noseam has been refactored to be callable. Makefile test has been converted to a gtest and removed. (#5600) * Noseam has been refactored to be callable. Makefile test has been converted to a gtest and removed. Addresses #5599. * Modifications to address gtest failures. Also added addtional input parameter error checking to ensure noseam exits prior to generation of temporary files. Finally modified gtests to remove the print.prt file if generated. Addresses #5599. * The explode application has been refactored to be callable and Makefile test converted to a gtest. (#5590) * Updated explode application gtest to use DefaultCube fixture instead of cube in isis/tests/data. Addresses #5557. * Cleaned up includes in default explode gtest. Added history entry to explode.xml. Addresses #5557. * Updating main.cpp and removed Makefile tests for explode conversion to callable app. Addresses #5557. * Added CHANGELOG entry for conversion of explode app to callable function. Addresses #5557. --------- Co-authored-by:
Adam Paquette <acpaquette@usgs.gov> * Isisminer has been refactored to be callable and Makefile tests converted to gtest format (#5579) * Fixed minor misspellings in error messages. Addresses #5516. * Test data added for isisminer. Addresses #5516. * Converted isisminer Makefile tests to gtest format. Addresses #5516. * Converted isisminer application to callable function. Addresses #5516. * Minor tweak to isisminer csvwriter test. Addresses #5516. * Added compareCsvLineCustomDelimiter method, specifically for isisminer testing support. Addresses #5516. * Removed isisminer Makefile tests (replaced by gtests) and updated CHANGELOG reflecting conversion of isisminer to callable app. Addresses #5516. * Replace isis cube in /isis/tests/data/isisminer/gistest with isd and label files. Minor tweaks to FunctionalTestsIsisminer.cpp. History entry added to isisminer.xml. Addresses #5516. * Minor changes for conversion of isisminer to callable app. Addresses #5516. * Had to add data file index.lbl to the .gitignore file for it to be uploaded. Addresses #5516. * Algebra has been refactored to be callable; old Makefile tests have been converted to gtests and removed. Addresses #5594. (#5597) * Photrim has been refactored to be callable; old Makefile tests have been converted to gtests and removed. (#5582) * Photrim has been converted to a callable app. Corresponding Makefile tests have been converted to gtests and removed. Addresses #5581. * Tweaks to FunctionalTestsPhotrim.cpp. Addresses #5581. * Bandtrim has been refactored to be callable; old Makefile tests have been converted to gtests. (#5572) * Bandtrim has been refactored to be callable; old Makefile tests have been removed and replaced by gtests. Addresses #5571. * Update FunctionalTestsBandtrim.cpp Minor documentation change. * Updated kaguyasp2ascii to support newer (detached) data (#5568) * Modified to work with new (detached) data * Updated changelog * Allow data specification outside current directory * Jigsaw csm error message (#5562) * Added fail-early + error message for csminit'd images without csm solve parameters * Updated changelog * Bug fix in noproj to remove persistent temporary lbl file (#5578) * Added line to close match cube in noproj.cpp. Not closing the cube resulted in a temporary "*.lbl" file that remained after running the noproj application. Addresses #5577. * CHANGELOG entry for noproj bug fix. Addresses #5577. * Added history entry in noproj.xml. Addresses #5577. * Remove restrictive validity check in caminfo (#5553) * Removed preemptive validity check for polygon * Removed unused import * Updated changelog * Qview command line Fix (#5505) * Avoid double image load when opening cubes from cmdline in qview * Added changelog entry * Revert interval change * Change qt to qt-main * Update deps and pcl cmake * Add float.h * CsmSerialNumber.trn - typo and PVL compilant fix (#5561) * Fixed typo * PVL compliant * PR feedback changes * hrsc2isis support for level 3 images (#5560) * Remove label check for level3 * update changelog * fix test * addressed PR feedback * fixed grammar * Fixed gllssi2isis to support V1.1 data (#5570) * Removed a debug output statement inadvertently left in noseam.cpp. Addresses #5660. (#5661) * Bug fixes to address incorrect handling of RADIUS in the jigsaw GUI and in the bundleout.txt file when performing a rectangular (XYZ) bundle adjustment, originally implemented in UofA OSIRIS-REx code on 2019-07-30. Addresses #5642. (#5643) * The RADIUS checkbox in the GUI is excluded when a RECTANGULAR solution is selected. * In the bundleout.txt file, for rectangular solutions, 1) RADIUS is set to N/A in the SOLVE OPTIONS section; and 2) the POINTS UNCERTAINTY SECTION was fixed to properly display adjusted point uncertainty statistics with Error Propagation turned on. * Spacing for point labels was cleaned up in the INPUT: GLOBAL IMAGE PARAMETER UNCERTAINTIES section. * Finally, a slight modification was added to the FunctionalTestJigsawBundleXYZ ctest to verify that RADIUS is N/A in a RECTANGULAR solution. * Updated kaguyasp2ascii to support newer (detached) data (#5568) * Modified to work with new (detached) data * Updated changelog * Allow data specification outside current directory * Speeds up FunctionalTestCamstatsDefaultParameters (#5647) * speed up camstats * add changelog * fixes photomet not accepting backplanes (#5658) * fixes photomet not accepting backplanes * fix changelog * Converted to gtests * Add input cube attributes * Convert dstripe to gtests (#5665) * Convert dstripe to gtests * add changelog * Fixed build error * trigger build * trigger build * Update docs --------- Co-authored-by:
Amy Stamile <74275278+amystamile-usgs@users.noreply.github.com> Co-authored-by:
Sarah Sutton <ssutton@lpl.arizona.edu> Co-authored-by:
Sarah Sutton <ssutton@dhcp-10-142-214-177.uawifi.arizona.edu> Co-authored-by:
kledmundson <6842706+kledmundson@users.noreply.github.com> Co-authored-by:
Adam Paquette <acpaquette@usgs.gov> Co-authored-by:
Austin Sanders <arsanders@usgs.gov> Co-authored-by:
Shin-ya Murakami <86389420+murashinln@users.noreply.github.com>
MetadataExporterClass.cpp 28.26 KiB
/*----- PROTECTED REGION ID(MetadataExporterClass.cpp) ENABLED START -----*/
static const char *TagName = "$Name: $";
static const char *CvsPath = "$Source: $";
static const char *SvnPath = "$HeadURL: $";
static const char *HttpServer = "http://www.esrf.eu/computing/cs/tango/tango_doc/ds_doc/";
//=============================================================================
//
// file : MetadataExporterClass.cpp
//
// description : C++ source for the MetadataExporterClass.
// A singleton class derived from DeviceClass.
// It implements the command and attribute list
// and all properties and methods required
// by the MetadataExporter once per process.
//
// project : Metadata exporter device server
//
// This file is part of Tango device class.
//
// Tango is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Tango is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with Tango. If not, see <http://www.gnu.org/licenses/>.
//
// $Author: $
//
// $Revision: $
// $Date: $
//
// $HeadURL: $
//
//=============================================================================
// This file is generated by POGO
// (Program Obviously used to Generate tango Object)
//=============================================================================
#include <MetadataExporterClass.h>
/*----- PROTECTED REGION END -----*/ // MetadataExporterClass.cpp
//-------------------------------------------------------------------
/**
* Create MetadataExporterClass singleton and
* return it in a C function for Python usage
*/
//-------------------------------------------------------------------
extern "C" {
#ifdef _TG_WINDOWS_
__declspec(dllexport)
#endif
Tango::DeviceClass *_create_MetadataExporter_class(const char *name) {
return MetadataExporter_ns::MetadataExporterClass::init(name);
}
}
namespace MetadataExporter_ns
{
//===================================================================
// Initialize pointer for singleton pattern
//===================================================================
MetadataExporterClass *MetadataExporterClass::_instance = NULL;
//--------------------------------------------------------
/**
* method : MetadataExporterClass::MetadataExporterClass(string &s)
* description : constructor for the MetadataExporterClass
*
* @param s The class name
*/
//--------------------------------------------------------
MetadataExporterClass::MetadataExporterClass(string &s):Tango::DeviceClass(s)
{
cout2 << "Entering MetadataExporterClass constructor" << endl;
set_default_property();
get_class_property();
write_class_property();
/*----- PROTECTED REGION ID(MetadataExporterClass::constructor) ENABLED START -----*/
/*----- PROTECTED REGION END -----*/ // MetadataExporterClass::constructor
cout2 << "Leaving MetadataExporterClass constructor" << endl;
}
//--------------------------------------------------------
/**
* method : MetadataExporterClass::~MetadataExporterClass()
* description : destructor for the MetadataExporterClass
*/
//--------------------------------------------------------
MetadataExporterClass::~MetadataExporterClass()
{
/*----- PROTECTED REGION ID(MetadataExporterClass::destructor) ENABLED START -----*/
/*----- PROTECTED REGION END -----*/ // MetadataExporterClass::destructor
_instance = NULL;
}
//--------------------------------------------------------
/**
* method : MetadataExporterClass::init
* description : Create the object if not already done.
* Otherwise, just return a pointer to the object
*
* @param name The class name
*/
//--------------------------------------------------------
MetadataExporterClass *MetadataExporterClass::init(const char *name)
{
if (_instance == NULL)
{
try
{
string s(name);
_instance = new MetadataExporterClass(s);
}
catch (bad_alloc &)
{
throw;
}
}
return _instance;
}
//--------------------------------------------------------
/**
* method : MetadataExporterClass::instance
* description : Check if object already created,
* and return a pointer to the object
*/
//--------------------------------------------------------
MetadataExporterClass *MetadataExporterClass::instance()
{
if (_instance == NULL)
{
cerr << "Class is not initialised !!" << endl;
exit(-1);
}
return _instance;
}
//===================================================================
// Command execution method calls
//===================================================================
//--------------------------------------------------------
/**
* method : OnClass::execute()
* description : method to trigger the execution of the command.
*
* @param device The device on which the command must be executed
* @param in_any The command input data
*
* returns The command output data (packed in the Any object)
*/
//--------------------------------------------------------
CORBA::Any *OnClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
{
cout2 << "OnClass::execute(): arrived" << endl;
((static_cast<MetadataExporter *>(device))->on());
return new CORBA::Any();
}
//--------------------------------------------------------
/**
* method : OffClass::execute()
* description : method to trigger the execution of the command.
*
* @param device The device on which the command must be executed
* @param in_any The command input data
*
* returns The command output data (packed in the Any object)
*/
//--------------------------------------------------------
CORBA::Any *OffClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
{
cout2 << "OffClass::execute(): arrived" << endl;
((static_cast<MetadataExporter *>(device))->off());
return new CORBA::Any();
}
//===================================================================
// Properties management
//===================================================================
//--------------------------------------------------------
/**
* Method : MetadataExporterClass::get_class_property()
* Description : Get the class property for specified name.
*/
//--------------------------------------------------------
Tango::DbDatum MetadataExporterClass::get_class_property(string &prop_name)
{
for (unsigned int i=0 ; i<cl_prop.size() ; i++)
if (cl_prop[i].name == prop_name)
return cl_prop[i];
// if not found, returns an empty DbDatum
return Tango::DbDatum(prop_name);
}
//--------------------------------------------------------
/**
* Method : MetadataExporterClass::get_default_device_property()
* Description : Return the default value for device property.
*/
//--------------------------------------------------------
Tango::DbDatum MetadataExporterClass::get_default_device_property(string &prop_name)
{
for (unsigned int i=0 ; i<dev_def_prop.size() ; i++)
if (dev_def_prop[i].name == prop_name)
return dev_def_prop[i];
// if not found, return an empty DbDatum
return Tango::DbDatum(prop_name);
}
//--------------------------------------------------------
/**
* Method : MetadataExporterClass::get_default_class_property()
* Description : Return the default value for class property.
*/
//--------------------------------------------------------
Tango::DbDatum MetadataExporterClass::get_default_class_property(string &prop_name)
{
for (unsigned int i=0 ; i<cl_def_prop.size() ; i++)
if (cl_def_prop[i].name == prop_name)
return cl_def_prop[i];
// if not found, return an empty DbDatum
return Tango::DbDatum(prop_name);
}
//--------------------------------------------------------
/**
* Method : MetadataExporterClass::get_class_property()
* Description : Read database to initialize class property data members.
*/
//--------------------------------------------------------
void MetadataExporterClass::get_class_property()
{
/*----- PROTECTED REGION ID(MetadataExporterClass::get_class_property_before) ENABLED START -----*/
// Initialize class property data members
/*----- PROTECTED REGION END -----*/ // MetadataExporterClass::get_class_property_before
// Read class properties from database.
cl_prop.push_back(Tango::DbDatum("CertificateFile"));
cl_prop.push_back(Tango::DbDatum("PrivateKeyFile"));
cl_prop.push_back(Tango::DbDatum("DHTempFile"));
cl_prop.push_back(Tango::DbDatum("ExportedTables"));
cl_prop.push_back(Tango::DbDatum("AuthorisedUsers"));
// Call database and extract values
if (Tango::Util::instance()->_UseDb==true)
get_db_class()->get_property(cl_prop);
Tango::DbDatum def_prop;
int i = -1;
// Try to extract CertificateFile value
if (cl_prop[++i].is_empty()==false) cl_prop[i] >> certificateFile;
else
{
// Check default value for CertificateFile
def_prop = get_default_class_property(cl_prop[i].name);
if (def_prop.is_empty()==false)
{
def_prop >> certificateFile;
cl_prop[i] << certificateFile;
}
}
// Try to extract PrivateKeyFile value
if (cl_prop[++i].is_empty()==false) cl_prop[i] >> privateKeyFile;
else
{
// Check default value for PrivateKeyFile
def_prop = get_default_class_property(cl_prop[i].name);
if (def_prop.is_empty()==false)
{
def_prop >> privateKeyFile;
cl_prop[i] << privateKeyFile;
}
}
// Try to extract DHTempFile value
if (cl_prop[++i].is_empty()==false) cl_prop[i] >> dHTempFile;
else
{
// Check default value for DHTempFile
def_prop = get_default_class_property(cl_prop[i].name);
if (def_prop.is_empty()==false)
{
def_prop >> dHTempFile;
cl_prop[i] << dHTempFile;
}
}
// Try to extract ExportedTables value
if (cl_prop[++i].is_empty()==false) cl_prop[i] >> exportedTables;
else
{
// Check default value for ExportedTables
def_prop = get_default_class_property(cl_prop[i].name);
if (def_prop.is_empty()==false)
{
def_prop >> exportedTables;
cl_prop[i] << exportedTables;
}
}
// Try to extract AuthorisedUsers value
if (cl_prop[++i].is_empty()==false) cl_prop[i] >> authorisedUsers;
else
{
// Check default value for AuthorisedUsers
def_prop = get_default_class_property(cl_prop[i].name);
if (def_prop.is_empty()==false)
{
def_prop >> authorisedUsers;
cl_prop[i] << authorisedUsers;
}
}
/*----- PROTECTED REGION ID(MetadataExporterClass::get_class_property_after) ENABLED START -----*/
// Check class property data members init
/*----- PROTECTED REGION END -----*/ // MetadataExporterClass::get_class_property_after
}
//--------------------------------------------------------
/**
* Method : MetadataExporterClass::set_default_property()
* Description : Set default property (class and device) for wizard.
* For each property, add to wizard property name and description.
* If default value has been set, add it to wizard property and
* store it in a DbDatum.
*/
//--------------------------------------------------------
void MetadataExporterClass::set_default_property()
{
string prop_name;
string prop_desc;
string prop_def;
vector<string> vect_data;
// Set Default Class Properties
prop_name = "CertificateFile";
prop_desc = "Absolute path to certificate chain file";
prop_def = "";
vect_data.clear();
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
data << vect_data ;
cl_def_prop.push_back(data);
add_wiz_class_prop(prop_name, prop_desc, prop_def);
}
else
add_wiz_class_prop(prop_name, prop_desc);
prop_name = "PrivateKeyFile";
prop_desc = "Absolute path to private key file";
prop_def = "";
vect_data.clear();
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
data << vect_data ;
cl_def_prop.push_back(data);
add_wiz_class_prop(prop_name, prop_desc, prop_def);
}
else
add_wiz_class_prop(prop_name, prop_desc);
prop_name = "DHTempFile";
prop_desc = "Absolute path to Diffie Hellman temporary file";
prop_def = "";
vect_data.clear();
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
data << vect_data ;
cl_def_prop.push_back(data);
add_wiz_class_prop(prop_name, prop_desc, prop_def);
}
else
add_wiz_class_prop(prop_name, prop_desc);
prop_name = "ExportedTables";
prop_desc = "Tables exporter from database: one table per row\n[schema table]";
prop_def = "";
vect_data.clear();
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
data << vect_data ;
cl_def_prop.push_back(data);
add_wiz_class_prop(prop_name, prop_desc, prop_def);
}
else
add_wiz_class_prop(prop_name, prop_desc);
prop_name = "AuthorisedUsers";
prop_desc = "Authorised user list: one user per row\n[username password]";
prop_def = "";
vect_data.clear();
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
data << vect_data ;
cl_def_prop.push_back(data);
add_wiz_class_prop(prop_name, prop_desc, prop_def);
}
else
add_wiz_class_prop(prop_name, prop_desc);
// Set Default device Properties
prop_name = "CertificateFile";
prop_desc = "Absolute path to certificate chain file";
prop_def = "";
vect_data.clear();
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
data << vect_data ;
dev_def_prop.push_back(data);
add_wiz_dev_prop(prop_name, prop_desc, prop_def);
}
else
add_wiz_dev_prop(prop_name, prop_desc);
prop_name = "PrivateKeyFile";
prop_desc = "Absolute path to private key file";
prop_def = "";
vect_data.clear();
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
data << vect_data ;
dev_def_prop.push_back(data);
add_wiz_dev_prop(prop_name, prop_desc, prop_def);
}
else
add_wiz_dev_prop(prop_name, prop_desc);
prop_name = "DHTempFile";
prop_desc = "Absolute path to Diffie Hellman temporary file";
prop_def = "";
vect_data.clear();
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
data << vect_data ;
dev_def_prop.push_back(data);
add_wiz_dev_prop(prop_name, prop_desc, prop_def);
}
else
add_wiz_dev_prop(prop_name, prop_desc);
prop_name = "LocalHost";
prop_desc = "Local host address for incoming connection";
prop_def = "";
vect_data.clear();
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
data << vect_data ;
dev_def_prop.push_back(data);
add_wiz_dev_prop(prop_name, prop_desc, prop_def);
}
else
add_wiz_dev_prop(prop_name, prop_desc);
prop_name = "LocalPort";
prop_desc = "Local port for wait incoming connection";
prop_def = "";
vect_data.clear();
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
data << vect_data ;
dev_def_prop.push_back(data);
add_wiz_dev_prop(prop_name, prop_desc, prop_def);
}
else
add_wiz_dev_prop(prop_name, prop_desc);
prop_name = "WorkerNumber";
prop_desc = "Number of threads that call io service run methods";
prop_def = "8";
vect_data.clear();
vect_data.push_back("8");
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
data << vect_data ;
dev_def_prop.push_back(data);
add_wiz_dev_prop(prop_name, prop_desc, prop_def);
}
else
add_wiz_dev_prop(prop_name, prop_desc);
prop_name = "EnableSSL";
prop_desc = "Enable or disable SSL connections";
prop_def = "0";
vect_data.clear();
vect_data.push_back("0");
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
data << vect_data ;
dev_def_prop.push_back(data);
add_wiz_dev_prop(prop_name, prop_desc, prop_def);
}
else
add_wiz_dev_prop(prop_name, prop_desc);
prop_name = "DatabaseHost";
prop_desc = "Metadata database host";
prop_def = "";
vect_data.clear();
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
data << vect_data ;
dev_def_prop.push_back(data);
add_wiz_dev_prop(prop_name, prop_desc, prop_def);
}
else
add_wiz_dev_prop(prop_name, prop_desc);
prop_name = "DatabasePort";
prop_desc = "Metadata database port";
prop_def = "";
vect_data.clear();
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
data << vect_data ;
dev_def_prop.push_back(data);
add_wiz_dev_prop(prop_name, prop_desc, prop_def);
}
else
add_wiz_dev_prop(prop_name, prop_desc);
prop_name = "DatabaseUsername";
prop_desc = "Metadata database login username";
prop_def = "";
vect_data.clear();
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
data << vect_data ;
dev_def_prop.push_back(data);
add_wiz_dev_prop(prop_name, prop_desc, prop_def);
}
else
add_wiz_dev_prop(prop_name, prop_desc);
prop_name = "DatabasePassword";
prop_desc = "Metadata database login password";
prop_def = "";
vect_data.clear();
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
data << vect_data ;
dev_def_prop.push_back(data);
add_wiz_dev_prop(prop_name, prop_desc, prop_def);
}
else
add_wiz_dev_prop(prop_name, prop_desc);
prop_name = "DatabaseConnectionNumber";
prop_desc = "Number of database connection created";
prop_def = "2";
vect_data.clear();
vect_data.push_back("2");
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
data << vect_data ;
dev_def_prop.push_back(data);
add_wiz_dev_prop(prop_name, prop_desc, prop_def);
}
else
add_wiz_dev_prop(prop_name, prop_desc);
prop_name = "ExportedTables";
prop_desc = "Tables exporter from database: one table per row\n[schema table]";
prop_def = "";
vect_data.clear();
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
data << vect_data ;
dev_def_prop.push_back(data);
add_wiz_dev_prop(prop_name, prop_desc, prop_def);
}
else
add_wiz_dev_prop(prop_name, prop_desc);
prop_name = "AuthorisedUsers";
prop_desc = "Authorised user list: one user per row\n[username password]";
prop_def = "";
vect_data.clear();
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
data << vect_data ;
dev_def_prop.push_back(data);
add_wiz_dev_prop(prop_name, prop_desc, prop_def);
}
else
add_wiz_dev_prop(prop_name, prop_desc);
}
//--------------------------------------------------------
/**
* Method : MetadataExporterClass::write_class_property()
* Description : Set class description fields as property in database
*/
//--------------------------------------------------------
void MetadataExporterClass::write_class_property()
{
// First time, check if database used
if (Tango::Util::_UseDb == false)
return;
Tango::DbData data;
string classname = get_name();
string header;
string::size_type start, end;
// Put title
Tango::DbDatum title("ProjectTitle");
string str_title("Metadata exporter device server");
title << str_title;
data.push_back(title);
// Put Description
Tango::DbDatum description("Description");
vector<string> str_desc;
str_desc.push_back("Metadata exporter device server");
description << str_desc;
data.push_back(description);
// put cvs or svn location
string filename("MetadataExporter");
filename += "Class.cpp";
// check for cvs information
string src_path(CvsPath);
start = src_path.find("/");
if (start!=string::npos)
{
end = src_path.find(filename);
if (end>start)
{
string strloc = src_path.substr(start, end-start);
// Check if specific repository
start = strloc.find("/cvsroot/");
if (start!=string::npos && start>0)
{
string repository = strloc.substr(0, start);
if (repository.find("/segfs/")!=string::npos)
strloc = "ESRF:" + strloc.substr(start, strloc.length()-start);
}
Tango::DbDatum cvs_loc("cvs_location");
cvs_loc << strloc;
data.push_back(cvs_loc);
}
}
// check for svn information
else
{
string src_path(SvnPath);
start = src_path.find("://");
if (start!=string::npos)
{
end = src_path.find(filename);
if (end>start)
{
header = "$HeadURL: ";
start = header.length();
string strloc = src_path.substr(start, (end-start));
Tango::DbDatum svn_loc("svn_location");
svn_loc << strloc;
data.push_back(svn_loc);
}
}
}
// Get CVS or SVN revision tag
// CVS tag
string tagname(TagName);
header = "$Name: ";
start = header.length();
string endstr(" $");
end = tagname.find(endstr);
if (end!=string::npos && end>start)
{
string strtag = tagname.substr(start, end-start);
Tango::DbDatum cvs_tag("cvs_tag");
cvs_tag << strtag;
data.push_back(cvs_tag);
}
// SVN tag
string svnpath(SvnPath);
header = "$HeadURL: ";
start = header.length();
end = svnpath.find(endstr);
if (end!=string::npos && end>start)
{
string strloc = svnpath.substr(start, end-start);
string tagstr ("/tags/");
start = strloc.find(tagstr);
if ( start!=string::npos )
{
start = start + tagstr.length();
end = strloc.find(filename);
string strtag = strloc.substr(start, end-start-1);
Tango::DbDatum svn_tag("svn_tag");
svn_tag << strtag;
data.push_back(svn_tag);
}
}
// Get URL location
string httpServ(HttpServer);
if (httpServ.length()>0)
{
Tango::DbDatum db_doc_url("doc_url");
db_doc_url << httpServ;
data.push_back(db_doc_url);
}
// Put inheritance
Tango::DbDatum inher_datum("InheritedFrom");
vector<string> inheritance;
inheritance.push_back("TANGO_BASE_CLASS");
inher_datum << inheritance;
data.push_back(inher_datum);
// Call database and and values
get_db_class()->put_property(data);
}
//===================================================================
// Factory methods
//===================================================================
//--------------------------------------------------------
/**
* Method : MetadataExporterClass::device_factory()
* Description : Create the device object(s)
* and store them in the device list
*/
//--------------------------------------------------------
void MetadataExporterClass::device_factory(const Tango::DevVarStringArray *devlist_ptr)
{
/*----- PROTECTED REGION ID(MetadataExporterClass::device_factory_before) ENABLED START -----*/
// Add your own code
/*----- PROTECTED REGION END -----*/ // MetadataExporterClass::device_factory_before
// Create devices and add it into the device list
for (unsigned long i=0 ; i<devlist_ptr->length() ; i++)
{
cout4 << "Device name : " << (*devlist_ptr)[i].in() << endl;
device_list.push_back(new MetadataExporter(this, (*devlist_ptr)[i]));
}
// Manage dynamic attributes if any
erase_dynamic_attributes(devlist_ptr, get_class_attr()->get_attr_list());
// Export devices to the outside world
for (unsigned long i=1 ; i<=devlist_ptr->length() ; i++)
{
// Add dynamic attributes if any
MetadataExporter *dev = static_cast<MetadataExporter *>(device_list[device_list.size()-i]);
dev->add_dynamic_attributes();
// Check before if database used.
if ((Tango::Util::_UseDb == true) && (Tango::Util::_FileDb == false))
export_device(dev);
else
export_device(dev, dev->get_name().c_str());
}
/*----- PROTECTED REGION ID(MetadataExporterClass::device_factory_after) ENABLED START -----*/
// Add your own code
/*----- PROTECTED REGION END -----*/ // MetadataExporterClass::device_factory_after
}
//--------------------------------------------------------
/**
* Method : MetadataExporterClass::attribute_factory()
* Description : Create the attribute object(s)
* and store them in the attribute list
*/
//--------------------------------------------------------
void MetadataExporterClass::attribute_factory(vector<Tango::Attr *> &att_list)
{
/*----- PROTECTED REGION ID(MetadataExporterClass::attribute_factory_before) ENABLED START -----*/
// Add your own code
/*----- PROTECTED REGION END -----*/ // MetadataExporterClass::attribute_factory_before
// Create a list of static attributes
create_static_attribute_list(get_class_attr()->get_attr_list());
/*----- PROTECTED REGION ID(MetadataExporterClass::attribute_factory_after) ENABLED START -----*/
// Add your own code
/*----- PROTECTED REGION END -----*/ // MetadataExporterClass::attribute_factory_after
}
//--------------------------------------------------------
/**
* Method : MetadataExporterClass::command_factory()
* Description : Create the command object(s)
* and store them in the command list
*/
//--------------------------------------------------------
void MetadataExporterClass::command_factory()
{
/*----- PROTECTED REGION ID(MetadataExporterClass::command_factory_before) ENABLED START -----*/
// Add your own code
/*----- PROTECTED REGION END -----*/ // MetadataExporterClass::command_factory_before
// Command On
OnClass *pOnCmd =
new OnClass("On",
Tango::DEV_VOID, Tango::DEV_VOID,
"",
"",
Tango::OPERATOR);
command_list.push_back(pOnCmd);
// Command Off
OffClass *pOffCmd =
new OffClass("Off",
Tango::DEV_VOID, Tango::DEV_VOID,
"",
"",
Tango::OPERATOR);
command_list.push_back(pOffCmd);
/*----- PROTECTED REGION ID(MetadataExporterClass::command_factory_after) ENABLED START -----*/
// Add your own code
/*----- PROTECTED REGION END -----*/ // MetadataExporterClass::command_factory_after
}
//===================================================================
// Dynamic attributes related methods
//===================================================================
//--------------------------------------------------------
/**
* method : MetadataExporterClass::create_static_attribute_list
* description : Create the a list of static attributes
*
* @param att_list the ceated attribute list
*/
//--------------------------------------------------------
void MetadataExporterClass::create_static_attribute_list(vector<Tango::Attr *> &att_list)
{
for (unsigned long i=0 ; i<att_list.size() ; i++)
{
string att_name(att_list[i]->get_name());
transform(att_name.begin(), att_name.end(), att_name.begin(), ::tolower);
defaultAttList.push_back(att_name);
}
cout2 << defaultAttList.size() << " attributes in default list" << endl;
/*----- PROTECTED REGION ID(MetadataExporterClass::create_static_att_list) ENABLED START -----*/
/*----- PROTECTED REGION END -----*/ // MetadataExporterClass::create_static_att_list
}
//--------------------------------------------------------
/**
* method : MetadataExporterClass::erase_dynamic_attributes
* description : delete the dynamic attributes if any.
*
* @param devlist_ptr the device list pointer
* @param list of all attributes
*/
//--------------------------------------------------------
void MetadataExporterClass::erase_dynamic_attributes(const Tango::DevVarStringArray *devlist_ptr, vector<Tango::Attr *> &att_list)
{
Tango::Util *tg = Tango::Util::instance();
for (unsigned long i=0 ; i<devlist_ptr->length() ; i++)
{
Tango::DeviceImpl *dev_impl = tg->get_device_by_name(((string)(*devlist_ptr)[i]).c_str());
MetadataExporter *dev = static_cast<MetadataExporter *> (dev_impl);
vector<Tango::Attribute *> &dev_att_list = dev->get_device_attr()->get_attribute_list();
vector<Tango::Attribute *>::iterator ite_att;
for (ite_att=dev_att_list.begin() ; ite_att != dev_att_list.end() ; ++ite_att)
{
string att_name((*ite_att)->get_name_lower());
if ((att_name == "state") || (att_name == "status"))
continue;
vector<string>::iterator ite_str = find(defaultAttList.begin(), defaultAttList.end(), att_name);
if (ite_str == defaultAttList.end())
{
cout2 << att_name << " is a UNWANTED dynamic attribute for device " << (*devlist_ptr)[i] << endl;
Tango::Attribute &att = dev->get_device_attr()->get_attr_by_name(att_name.c_str());
dev->remove_attribute(att_list[att.get_attr_idx()], true, false);
--ite_att;
}
}
}
/*----- PROTECTED REGION ID(MetadataExporterClass::erase_dynamic_attributes) ENABLED START -----*/
/*----- PROTECTED REGION END -----*/ // MetadataExporterClass::erase_dynamic_attributes
}
//--------------------------------------------------------
/**
* Method : MetadataExporterClass::get_attr_by_name()
* Description : returns Tango::Attr * object found by name
*/
//--------------------------------------------------------
Tango::Attr *MetadataExporterClass::get_attr_object_by_name(vector<Tango::Attr *> &att_list, string attname)
{
vector<Tango::Attr *>::iterator it;
for (it=att_list.begin() ; it<att_list.end() ; it++)
if ((*it)->get_name()==attname)
return (*it);
// Attr does not exist
return NULL;
}
/*----- PROTECTED REGION ID(MetadataExporterClass::Additional Methods) ENABLED START -----*/
/*----- PROTECTED REGION END -----*/ // MetadataExporterClass::Additional Methods
} // namespace