+ add new class ParameterSerializer to load and save parameter files

This commit is contained in:
wmayer
2016-04-29 17:43:07 +02:00
parent af72ae09c1
commit 00eaab0522
5 changed files with 151 additions and 26 deletions

View File

@@ -957,6 +957,34 @@ void ParameterGrp::NotifyAll()
Notify(It5->first.c_str());
}
//**************************************************************************
//**************************************************************************
// ParameterSerializer
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ParameterSerializer::ParameterSerializer(const std::string& fn)
: filename(fn)
{
}
ParameterSerializer::~ParameterSerializer()
{
}
void ParameterSerializer::SaveDocument(const ParameterManager& mgr)
{
mgr.SaveDocument(filename.c_str());
}
int ParameterSerializer::LoadDocument(ParameterManager& mgr)
{
return mgr.LoadDocument(filename.c_str());
}
bool ParameterSerializer::LoadOrCreateDocument(ParameterManager& mgr)
{
return mgr.LoadOrCreateDocument(filename.c_str());
}
//**************************************************************************
//**************************************************************************
// ParameterManager
@@ -970,7 +998,7 @@ static XercesDOMParser::ValSchemes gValScheme = XercesDOMParser::Val_Au
/** Default construction
*/
ParameterManager::ParameterManager()
: ParameterGrp(), _pDocument(0)
: ParameterGrp(), _pDocument(0), paramSerializer(0)
{
// initialize the XML system
Init();
@@ -1036,6 +1064,7 @@ ParameterManager::ParameterManager()
ParameterManager::~ParameterManager()
{
delete _pDocument;
delete paramSerializer;
}
void ParameterManager::Init(void)
@@ -1069,6 +1098,43 @@ void ParameterManager::Terminate(void)
XMLPlatformUtils::Terminate();
}
//**************************************************************************
// Serializer handling
void ParameterManager::SetSerializer(ParameterSerializer* ps)
{
if (paramSerializer != ps)
delete paramSerializer;
paramSerializer = ps;
}
bool ParameterManager::HasSerializer() const
{
return (paramSerializer != 0);
}
int ParameterManager::LoadDocument()
{
if (paramSerializer)
return paramSerializer->LoadDocument(*this);
else
return -1;
}
bool ParameterManager::LoadOrCreateDocument()
{
if (paramSerializer)
return paramSerializer->LoadOrCreateDocument(*this);
else
return false;
}
void ParameterManager::SaveDocument() const
{
if (paramSerializer)
paramSerializer->SaveDocument(*this);
}
//**************************************************************************
// Document handling

View File

@@ -25,7 +25,7 @@
#ifndef BASE__PARAMETER_H
#define BASE__PARAMETER_H
// (re-)defined in pyconfig.h
#if defined (_POSIX_C_SOURCE)
# undef _POSIX_C_SOURCE
@@ -264,13 +264,33 @@ protected:
};
/** The parameter serializer class
* This is a helper class to serialize a parameter XML document.
* Does loading and saving the DOM document from and to files.
* In sub-classes the load and saving of XML documents can be
* customized.
* @see ParameterManager
*/
class BaseExport ParameterSerializer
{
public:
ParameterSerializer(const std::string& fn);
virtual ~ParameterSerializer();
virtual void SaveDocument(const ParameterManager&);
virtual int LoadDocument(ParameterManager&);
virtual bool LoadOrCreateDocument(ParameterManager&);
protected:
std::string filename;
};
/** The parameter manager class
* This class manages a parameter XML document.
* Does loding, saving and handling the DOM document.
* Does loading, saving and handling the DOM document.
* @see ParameterGrp
*/
class BaseExport ParameterManager : public ParameterGrp
class BaseExport ParameterManager : public ParameterGrp
{
public:
ParameterManager();
@@ -286,9 +306,24 @@ public:
void CreateDocument(void);
void CheckDocument() const;
/** @name Parameter serialization */
//@{
/// Sets a serializer. The ParameterManager takes ownership of the serializer.
void SetSerializer(ParameterSerializer*);
/// Returns true if a serializer is set, otherwise false is returned.
bool HasSerializer() const;
/// Loads an XML document by calling the serializer's load method.
int LoadDocument();
/// Loads or creates an XML document by calling the serializer's load method.
bool LoadOrCreateDocument();
/// Saves an XML document by calling the serializer's save method.
void SaveDocument() const;
//@}
private:
XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument *_pDocument;
ParameterSerializer * paramSerializer;
bool gDoNamespaces ;
bool gDoSchema ;