Meta data repository at the database level. More...
#include <SharedMetaData.h>
Public Member Functions | |
| void | add (MetaData *d) |
| void | add (Signal *sig) |
| void | setIds () |
| SharedMetaData () | |
| SharedMetaData (const SharedMetaData &o) | |
| virtual const QString & | xml_tagName () const |
| void | xml_writeLinks (XMLStream &s) const |
| virtual | ~SharedMetaData () |
Static Public Attributes | |
| static const QString | xmlSharedMetaDataTag = "SharedMetaData" |
Protected Member Functions | |
| virtual XMLMember | xml_member (XML_MEMBER_ARGS) |
| virtual bool | xml_setProperty (XML_SETPROPERTY_ARGS) |
| virtual void | xml_writeChildren (XML_WRITECHILDREN_ARGS) const |
| virtual void | xml_writeProperties (XML_WRITEPROPERTIES_ARGS) const |
Meta data repository at the database level.
During save and restore this structure is used for the storage of temporary shared meta data.
| GeopsyCore::SharedMetaData::SharedMetaData | ( | ) | [inline] |
{}
| GeopsyCore::SharedMetaData::SharedMetaData | ( | const SharedMetaData & | o | ) |
| virtual GeopsyCore::SharedMetaData::~SharedMetaData | ( | ) | [inline, virtual] |
{}
| void GeopsyCore::SharedMetaData::add | ( | MetaData * | d | ) | [inline] |
Referenced by add(), and SharedMetaData().
| void GeopsyCore::SharedMetaData::add | ( | Signal * | sig | ) |
| void GeopsyCore::SharedMetaData::setIds | ( | ) |
| XMLMember GeopsyCore::SharedMetaData::xml_member | ( | XML_MEMBER_ARGS | ) | [protected, virtual] |
Re-implement this function to offer XML restore (children and properties) support to your class.
From tag and map (with contains the attibute value) return a unique identifier under the format of a XMLMember. XMLMember is initialized with 3 types of contructors:
Map of attributes can be inspected in this way (can be achived also in xml_setProperty()):
static const QString tmp("childrenName"); XMLRestoreAttributeIterator it=map.find(tmp); if(it!=map.end()) { // found attribute "childrenName" }
If the map of attributes is not used:
Q_UNUSED(attributes);
if(tag=="x1") return XMLMember(0);
else if(tag=="y1") return XMLMember(1);
else if(tag=="x2") return XMLMember(2);
else if(tag=="y2") return XMLMember(3);
else return XMLMember(XMLMember::Unknown);
Arithmetic operations + and - apply to XMLMember to avoid confusion of property id numbers between inherited objects. Offset 3 corresponds to the number of properties defined in this object.
if(tag=="anInteger") return XMLMember(0); else if(tag=="aString") return XMLMember(1); else if(tag=="aDouble") return XMLMember(2); return AbstractLine::xml_member(tag, attributes, context)+3;
For the arguments of this function use Macro XML_MEMBER_ARGS.
Reimplemented from QGpCoreTools::XMLClass.
References GeopsyCore::MetaDataFactory::create(), QGpCoreTools::endl(), GeopsyCore::MetaDataFactory::instance(), GeopsyCore::MetaData::storeAsXML(), and QGpCoreTools::tr().
{
Q_UNUSED(context);
MetaData * d=MetaDataFactory::instance()->create(tag.toString());
if(d) {
static const QString indexAtt="sharedId";
XMLRestoreAttributeIterator it=attributes.find(indexAtt);
if(it==attributes.end()) {
App::stream() << tr("Missing attribute 'sharedId' for shared meta data %1.").arg(tag.toString()) << endl;
delete d;
return XMLMember(XMLMember::Unknown);
}
_lastId=it.value().toInt();
if(_lastId>=count()) {
resize(_lastId+1);
}
if((*this)[_lastId]) {
App::stream() << tr("Shared meta data id %1 already exists.").arg(_lastId) << endl;
delete d;
return XMLMember(XMLMember::Unknown);
}
(*this)[_lastId]=d;
if(d->storeAsXML()) {
return XMLMember(d);
} else {
return XMLMember(0);
}
} else {
App::stream() << tr("Unknown MetaData %1").arg(tag.toString()) << endl;
return XMLMember(XMLMember::Unknown);
}
}
| bool GeopsyCore::SharedMetaData::xml_setProperty | ( | XML_SETPROPERTY_ARGS | ) | [protected, virtual] |
Re-implement this function to offer XML restore properties support to your class.
From memberID set the corresponding property with value content. The map of attributes is given as a supplementary information (not useful in all cases).
For a general case:
Q_UNUSED(attributes); double val=content.toDouble(); switch (memberID) { case 0: _x1=val; return true; case 1: _y1=val; return true; case 2: _x2=val; return true; case 3: _y2=val; return true; default: return false; }
For classes inheriting other classes (see also xml_member())
switch (memberID) { case 0: _anInteger=content.toString(); return true; case 1: _aString=content.toInt(); return true; case 2: _aDouble=content.toDouble(); return true; default: return AbstractLine::xml_setProperty(memberID-3, map, content);
For the arguments of this function use Macro XML_SETPROPERTY_ARGS.
Reimplemented from QGpCoreTools::XMLClass.
References GeopsyCore::MetaData::fromString().
{
Q_UNUSED(tag);
Q_UNUSED(context);
if(memberID==0) {
MetaData * d=(*this)[_lastId];
static const QString tmp("index");
XMLRestoreAttributeIterator it=attributes.find(tmp);
if(it!=attributes.end()) {
d->fromString(it.value().toString(), content.toString());
} else {
d->fromString(0, content.toString());
}
return true;
} else {
return false;
}
}
| virtual const QString& GeopsyCore::SharedMetaData::xml_tagName | ( | ) | const [inline, virtual] |
Implements QGpCoreTools::XMLClass.
{return xmlSharedMetaDataTag;}
| void GeopsyCore::SharedMetaData::xml_writeChildren | ( | XML_WRITECHILDREN_ARGS | ) | const [protected, virtual] |
Reimplemented from QGpCoreTools::XMLClass.
References QGpCoreTools::XMLSaveAttributes::add(), GeopsyCore::MetaData::isStored(), GeopsyCore::MetaData::storeAsXML(), TRACE, and QGpCoreTools::XMLClass::xml_save().
{
TRACE;
static const QString indexAtt="sharedId";
XMLSaveAttributes att;
QString& index=att.add(indexAtt);
int n=count();
for(int i=0; i<n; i++) {
const MetaData * d=at(i);
if(d->isStored() && d->storeAsXML()) {
index=QString::number(i);
d->xml_save(s, context, att);
}
}
}
| void GeopsyCore::SharedMetaData::xml_writeLinks | ( | XMLStream & | s | ) | const |
| void GeopsyCore::SharedMetaData::xml_writeProperties | ( | XML_WRITEPROPERTIES_ARGS | ) | const [protected, virtual] |
Reimplemented from QGpCoreTools::XMLClass.
References QGpCoreTools::XMLSaveAttributes::add(), GeopsyCore::MetaData::isStored(), GeopsyCore::MetaData::storeAsXML(), TRACE, and GeopsyCore::MetaData::writeProperties().
{
TRACE;
Q_UNUSED(context);
static const QString indexAtt="sharedId";
XMLSaveAttributes att;
QString& index=att.add(indexAtt);
int n=count();
for(int i=0; i<n; i++) {
const MetaData * d=at(i);
if(d->isStored() && !d->storeAsXML()) {
index=QString::number(i);
d->writeProperties(s, att);
}
}
}
const QString GeopsyCore::SharedMetaData::xmlSharedMetaDataTag = "SharedMetaData" [static] |