Esempio n. 1
0
void 
OMXMLReaderExpat::startNamespaceDeclHandler(const XML_Char* prefix, const XML_Char* uri)
{
    TRACE("OMXMLReaderExpat::startNamespaceDeclHandler");

    QName* qName = new QName;
    
    if (prefix != 0)
    {
        wchar_t* workBuffer = getWorkBuffer(xmlStringLen(prefix) + 1);
        readCharacters(workBuffer, prefix, 0);
        qName->prefix = workBuffer;
    }

    if (uri != 0)
    {
        wchar_t* workBuffer = getWorkBuffer(xmlStringLen(uri) + 1);
        readCharacters(workBuffer, uri, 0);
        qName->uri = workBuffer;
    }

    _startNmspaceDecls.append(qName);

    XML_Status status = XML_StopParser(_parser, true);
    if (status != XML_STATUS_OK)
    {
        XML_Error errorCode = XML_GetErrorCode(_parser);
        if (errorCode != XML_ERROR_SUSPENDED)
        {
            throw OMException(getErrorString());
        }
    }

    registerEvent(START_PREFIX_MAPPING);
}
Esempio n. 2
0
void 
OMXMLReaderExpat::endElementHandler(const XML_Char* name)
{
    TRACE("OMXMLReaderExpat::endElementHandler");

    wchar_t* workBuffer = getWorkBuffer(xmlStringLen(name) + 1);
    OMUInt32 strLen = readCharacters(workBuffer, name, NAMESPACE_SEPARATOR);
    _uri = workBuffer;

    if (strLen > 0)
    {
        strLen = readCharacters(workBuffer, &(name[strLen + 1]), 0);
    }
    else
    {
        strLen = readCharacters(workBuffer, &(name[strLen]), 0);
    }
    _localName = workBuffer;

    XML_Status status = XML_StopParser(_parser, true);
    if (status != XML_STATUS_OK)
    {
        XML_Error errorCode = XML_GetErrorCode(_parser);
        if (errorCode != XML_ERROR_SUSPENDED)
        {
            throw OMException(getErrorString());
        }
    }

    registerEvent(END_ELEMENT);
}
Esempio n. 3
0
void 
OMXMLReaderExpat::notationDeclHandler(const XML_Char* notationName, const XML_Char* base,
    const XML_Char* systemId, const XML_Char* publicId)
{
    TRACE("OMXMLReaderExpat::notationDeclHandler");

    wchar_t* workBuffer = getWorkBuffer(xmlStringLen(notationName) + 1);
    OMUInt32 strLen = readCharacters(workBuffer, notationName, 0);
    _notationName = workBuffer;
    
    if (base != 0)
    {
        workBuffer = getWorkBuffer(xmlStringLen(base) + 1);
        strLen = readCharacters(workBuffer, base, 0);
        _base = workBuffer;
    }
    else
    {
        _base = L"";
    }
    
    if (systemId != 0)
    {
        workBuffer = getWorkBuffer(xmlStringLen(systemId) + 1);
        strLen = readCharacters(workBuffer, systemId, 0);
        _systemID = workBuffer;
    }
    else
    {
        _systemID = L"";
    }
    
    if (publicId != 0)
    {
        workBuffer = getWorkBuffer(xmlStringLen(publicId) + 1);
        strLen = readCharacters(workBuffer, publicId, 0);
        _publicID = workBuffer;
    }
    else
    {
        _publicID = L"";
    }
    
    XML_Status status = XML_StopParser(_parser, true);
    if (status != XML_STATUS_OK)
    {
        XML_Error errorCode = XML_GetErrorCode(_parser);
        if (errorCode != XML_ERROR_SUSPENDED)
        {
            throw OMException(getErrorString());
        }
    }

    registerEvent(NOTATION_DECL);
}
Esempio n. 4
0
void 
OMXMLReaderExpat::endNamespaceDeclHandler(const XML_Char* prefix)
{
    TRACE("OMXMLReaderExpat::endNamespaceDeclHandler");

    if (prefix != 0)
    {
        wchar_t* workBuffer = getWorkBuffer(xmlStringLen(prefix) + 1);
        readCharacters(workBuffer, prefix, 0);
        _endNmspaceDecls.append(workBuffer);
    }
    else
    {
        _endNmspaceDecls.append(L"");
    }
    
    XML_Status status = XML_StopParser(_parser, true);
    if (status != XML_STATUS_OK)
    {
        XML_Error errorCode = XML_GetErrorCode(_parser);
        if (errorCode != XML_ERROR_SUSPENDED)
        {
            throw OMException(getErrorString());
        }
    }

    registerEvent(END_PREFIX_MAPPING);
}
Esempio n. 5
0
void 
OMXMLReaderExpat::entityDeclHandler(const XML_Char *entityName, 
    int is_parameter_entity, const XML_Char *value, int value_length, 
    const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId, 
    const XML_Char *notationName)
{
    TRACE("OMXMLReaderExpat::entityDeclHandler");

    // only report unparsed (external) entity declarations
    if (is_parameter_entity == 0 && value == 0 && systemId != 0 && notationName != 0)
    {
        wchar_t* workBuffer = getWorkBuffer(xmlStringLen(entityName) + 1);
        OMUInt32 strLen = readCharacters(workBuffer, entityName, 0);
        _name = workBuffer;
        
        workBuffer = getWorkBuffer(xmlStringLen(systemId) + 1);
        strLen = readCharacters(workBuffer, systemId, 0);
        _systemID = workBuffer;
        
        if (publicId != 0)
        {
            workBuffer = getWorkBuffer(xmlStringLen(publicId) + 1);
            strLen = readCharacters(workBuffer, publicId, 0);
            _publicID = workBuffer;
        }
        else
        {
            _publicID = L"";
        }
        
        XML_Status status = XML_StopParser(_parser, true);
        if (status != XML_STATUS_OK)
        {
            XML_Error errorCode = XML_GetErrorCode(_parser);
            if (errorCode != XML_ERROR_SUSPENDED)
            {
                throw OMException(getErrorString());
            }
        }
    
        registerEvent(UNPARSED_ENTITY_DECL);
    }
}
void ConfigurationParser::readGeometry()
{
    Q_ASSERT(isStartElement()
              && name() == "geometry");

    QString path;
    double heightDimension = 1.0;
    QString geometryName = attributes().value("name").toString();
    QString layerSizesPath;

    while(!atEnd()) {
        readNext();

        if(isEndElement())
            break;

        if(isStartElement()) {
            if(name() == "layers") {
                path = readCharacters();
            }
            else if(name() == "heightDimension") {
                heightDimension = readCharacters().toDouble();
            }
            else if(name() == "depths") {
                layerSizesPath = readCharacters();
            }
            else {
                readUnknownElement();
            }
        }
    }

    QFile file(path);

    MapGeometryParser parser;
    parser.setFile(&file);
    parser.setLayerSizesPath(layerSizesPath);
    
    MapGeometry geometry = parser.mapGeometry();
    geometry.setHeightDimension(heightDimension);
    m_geometries.insert(geometryName, geometry);
}
Esempio n. 7
0
void 
OMXMLReaderExpat::startElementHandler(const XML_Char* name, const XML_Char** atts)
{
    TRACE("OMXMLReaderExpat::startElementHandler");

    wchar_t* workBuffer = getWorkBuffer(xmlStringLen(name) + 1);
    OMUInt32 strLen = readCharacters(workBuffer, name, NAMESPACE_SEPARATOR);
    _uri = workBuffer;

    if (strLen > 0)
    {
        strLen = readCharacters(workBuffer, &(name[strLen + 1]), 0);
    }
    else
    {
        strLen = readCharacters(workBuffer, &(name[strLen]), 0);
    }
    _localName = workBuffer;

    
    OMListIterator<OMXMLAttribute*> iter(_attributes, OMBefore);
    while (++iter)
    {
        delete iter.value();
    }
    _attributes.clear();
    
    if (*atts != 0)
    {
        const XML_Char** attsPtr = atts;
        while (*attsPtr != 0)
        {
            OMWString nmspace;
            OMWString localName;
            OMWString value;
            
            wchar_t* workBuffer = getWorkBuffer(xmlStringLen(*attsPtr) + 1);
            OMUInt32 strLen = readCharacters(workBuffer, *attsPtr, NAMESPACE_SEPARATOR);
            nmspace = workBuffer;
            
            if (strLen > 0)
            {
                strLen = readCharacters(workBuffer, &((*attsPtr)[strLen + 1]), 0);
            }
            else
            {
                strLen = readCharacters(workBuffer, &((*attsPtr)[strLen]), 0);
            }
            localName = workBuffer;

            attsPtr++;

            workBuffer = getWorkBuffer(xmlStringLen(*attsPtr) + 1);
            strLen = readCharacters(workBuffer, *attsPtr, 0);
            value = workBuffer;
            
            _attributes.append(new OMXMLAttribute(nmspace.c_str(), localName.c_str(), value.c_str()));

            attsPtr++;
        }
    }

    XML_Status status = XML_StopParser(_parser, true);
    if (status != XML_STATUS_OK)
    {
        XML_Error errorCode = XML_GetErrorCode(_parser);
        if (errorCode != XML_ERROR_SUSPENDED)
        {
            throw OMException(getErrorString());
        }
    }

    registerEvent(START_ELEMENT);
}
void ConfigurationParser::readFiles(DataLayer *layer)
{
    Q_ASSERT(isStartElement()
             && name() == "files");
    
    QDateTime startDate;
    int start = 0;
    QDateTime endDate;
    int end = 0;
    int digits = 0;
    QString scheme;
    int skip = 0;
    
    while(!atEnd()) {
        readNext();
        
        if(isEndElement()) {
            break;
        }
        
        if(isStartElement()) {
            if(name() == "start") {
                QXmlStreamAttributes att = attributes();
                startDate.setTime(QTime::fromString(att.value("time").toString(), Qt::ISODate));
                startDate.setDate(QDate::fromString(att.value("date").toString(), Qt::ISODate));
                start = readCharacters().toInt();
            }
            else if(name() == "end") {
                QXmlStreamAttributes att = attributes();
                endDate.setTime(QTime::fromString(att.value("time").toString(), Qt::ISODate));
                endDate.setDate(QDate::fromString(att.value("date").toString(), Qt::ISODate));
                end = readCharacters().toInt();
            }
            else if(name() == "scheme") {
                QXmlStreamAttributes att = attributes();
                digits = att.value("digits").toString().toInt();
                if(att.hasAttribute("skip")) {
                    skip = att.value("skip").toString().toInt();
                }
                scheme = readCharacters();
            }
            else {
                readUnknownElement();
            }
        }
    }
    
    if(startDate.isValid() && endDate.isValid()) {
        qint64 spanMSecs = endDate.toMSecsSinceEpoch() - startDate.toMSecsSinceEpoch();
        int count = end - start;
        qint64 diffMSecs = spanMSecs / count;
        
        for(int i = start; i < end; i += 1 + skip) {
            QDateTime fileTime = startDate.addMSecs(diffMSecs * (i - start));
            qDebug() << "Time [" << i << "]:" << fileTime.toString();
            QString fileName = scheme.arg(i, digits, 10, QChar('0'));
            
            layer->setFileName(fileTime, fileName);
        }
    }
}
DataLayer *ConfigurationParser::readLayer()
{
    Q_ASSERT(isStartElement()
              && name() == "layer");

    DataLayer *layer = new DataLayer();
    ColorMap colorMap;
    
    QColor c;
    c.setHsv(240, 255, 189, 255);
    colorMap.addColor(c);
    c.setHsv(240, 255, 255, 255);
    colorMap.addColor(c);
    c.setHsv(224, 255, 255, 255);
    colorMap.addColor(c);
    c.setHsv(208, 255, 255, 255);
    colorMap.addColor(c);
    c.setHsv(195, 255, 255, 255);
    colorMap.addColor(c);
    c.setHsv(180, 255, 255, 255);
    colorMap.addColor(c);
    c.setHsv(159, 189, 255, 255);
    colorMap.addColor(c);
    c.setHsv(120, 123, 255, 255);
    colorMap.addColor(c);
    c.setHsv(80, 189, 255, 255);
    colorMap.addColor(c);
    c.setHsv(60, 255, 255, 255);
    colorMap.addColor(c);
    c.setHsv(44, 255, 255, 255);
    colorMap.addColor(c);
    c.setHsv(15, 255, 255, 255);
    colorMap.addColor(c);
    c.setHsv(0, 255, 255, 255);
    colorMap.addColor(c);
    c.setHsv(0, 255, 189, 255);
    colorMap.addColor(c);
    c.setHsv(0, 255, 132, 255);
    colorMap.addColor(c);
    colorMap.setInterpolationSpec(QColor::Hsv);

    while(!atEnd()) {
        readNext();

        if(isEndElement())
            break;

        if(isStartElement()) {
            if(name() == "file") {
                QXmlStreamAttributes att = attributes();
                QDateTime dateTime;
                dateTime.setTime(QTime::fromString(att.value("time").toString(), Qt::ISODate));
                dateTime.setDate(QDate::fromString(att.value("date").toString(), Qt::ISODate));
                layer->setFileName(dateTime, readCharacters());
                qDebug() << "Added file for time:" << dateTime;
            }
            else if(name() == "files") {
                readFiles(layer);
            }
            else if(name() == "name") {
                layer->setName(readCharacters());
                qDebug() << "Name:" << layer->name();
            }
            else if(name() == "geometry") {
                QString geometryName = readCharacters();
                
                QHash<QString,MapGeometry>::iterator it = m_geometries.find(geometryName);
                if(it != m_geometries.end()) {
                    layer->setGeometry(it.value());
                }
                else {
                    delete layer;
                    qDebug() << "Geometry not found.";
                    return 0;
                }
            }
            else if(name() == "scaleMin") {
                layer->setScaleMin(readCharacters().toDouble());
            }
            else if(name() == "scaleMax") {
                layer->setScaleMax(readCharacters().toDouble());
            }
            else if(name() == "defaultColorMap") {
                QString colorMapString = readCharacters();
                if(m_colorMaps.contains(colorMapString)) {
                    colorMap = m_colorMaps.value(colorMapString);
                }
            }
            else {
                readUnknownElement();
            }
        }
    }

    layer->setDefaultColorMap(colorMap);
    return layer;
}