All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Public Member Functions | Static Public Attributes | Protected Member Functions
GeopsyCore::SharedMetaData Class Reference

Meta data repository at the database level. More...

#include <SharedMetaData.h>

Inheritance diagram for GeopsyCore::SharedMetaData:
QGpCoreTools::XMLClass QVector

List of all members.

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

Detailed Description

Meta data repository at the database level.

During save and restore this structure is used for the storage of temporary shared meta data.


Constructor & Destructor Documentation

{}

References add(), and TRACE.

  : XMLClass(), QVector<MetaData *>()
  {
    TRACE;
    for(const_iterator it=o.begin(); it!=o.end(); it++) {
      add(*it);
    }
  }
virtual GeopsyCore::SharedMetaData::~SharedMetaData ( ) [inline, virtual]
{}

Member Function Documentation

void GeopsyCore::SharedMetaData::add ( MetaData d) [inline]

References TRACE.

  {
    TRACE;
    int n=count();
    for(int i=0; i<n; i++) {
      (*this)[i]->setSharedId(i);
    }
  }

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:

  • An integer: id number of a property
  • A XMLClass * : a child of this object identified by tag
  • Default constructor: error, unknow child or property

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);
    }
  }

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]

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);
      }
    }
  }

References TRACE.

  {
    TRACE;
    for(const_iterator it=begin(); it!=end(); it++) {
      (*it)->xml_writeLink(s);
    }
  }

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);
      }
    }
  }

Member Data Documentation

const QString GeopsyCore::SharedMetaData::xmlSharedMetaDataTag = "SharedMetaData" [static]

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines