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