Пример #1
0
bool ActionModel::loadXmlData (const CoaDomDocument& doc, const bool deepCopy)
{
   BEGIN;
   bool result = CoaXmlItemModel::loadXmlData(doc, deepCopy);
   if (result == true){
      if (documentVersion() != DOCVERSION)
         result = false;
   }
   RETURN(result);
}
ScreenieScene *XmlScreenieSceneDao::read() const
{
    ScreenieScene *result = 0;
    if (d->device.open(QIODevice::ReadOnly)) {
        d->streamReader = new QXmlStreamReader(&d->device);
        QXmlStreamReader::TokenType tokenType;
        while ((tokenType = d->streamReader->readNext()) != QXmlStreamReader::EndDocument) {
            if (tokenType == QXmlStreamReader::StartElement) {
                if (d->streamReader->name() == "screeniescene") {
                    QXmlStreamAttributes sceneAttributes = d->streamReader->attributes();
                    QString versionString = sceneAttributes.value("version").toString();
                    Version documentVersion(versionString);
                    if (documentVersion < d->version) {
                        /*!\todo Convert file to current version */
#ifdef DEBUG
                        qDebug("XmlScreenieSceneDao::read: CONVERSION NEEDED, document version: %s, app version: %s", qPrintable(documentVersion.toString()), qPrintable(d->version.toString()));
#endif
                    }
                    result = readScreenieScene();
                } else {
                    result = 0;
                }
            }
            if (d->streamReader->error() != QXmlStreamReader::NoError) {
                // Note: we do not deal yet with QXmlStreamReader::PrematureEndOfDocumentError: disk files
                // should always be complete XML
#ifdef DEBUG
                qDebug("XmlScreenieSceneDao::read: error: %d", d->streamReader->error());
#endif
                result = 0;
                break;
            }
        }
        d->device.close();
    } else {
        result = 0;
    }
    cleanUp();
    return result;
}