/** * @RDE_HEADER@ * Parse building xml file and create MainStructureElementCreateRequest for the data * $Id$ * $HeadURL$ * $Author$ * Created by Christian Ehrlicher, SLSE, 2017-02-02 */ #pragma once #include "ism_export.h" #include #include #include #include "logger.h" class QDomElement; class QDomDocument; namespace InfrastructureManagement { class ISM_CLIENT_EXPORT ParseBuildingXml : public QObject { Q_OBJECT public: struct BuildingMetaInfo { QString filename; Core::GeoPosition geoPosition; double rotationAngleDegree = 0; }; struct Egcu { int mountpointEgcu = 0; QVector rooms; }; struct SoundArea { int id{-1}; std::vector geometry ; int mainEgcuMountpoint{-1}; std::vector egcuMountpoints; }; ParseBuildingXml(const QString &xmlFilename, const QString &vulnerabilityFilename, const QString &egcuToRoomFilename, const QString &soundAreaFilename, const Core::GeoPosition &geoPosition, double rotationAngleDegree); bool parseXml(); QString lastError() const { return m_lastError; } QVector parseMetaXml(const QString &metaXml) const; const MainStructureElementModifyRequest &parsedRequest() const { return m_request; } private: QDomDocument openXml(const QString &fileName) const; void parseXmlInternal(); Egcu parseEgcu(const QDomElement &domEgcu); bool parseXmlEgcus(); bool parseXmlSoundArea(); QJsonObject egcusToJson() const; QJsonObject soundAreaToJson() const; void importFootprint(const QDomElement &parent); void importExternalReferences(const QDomElement &parent, int parentIdx); void importFloors(const QDomElement &parent, int parentIdx); void importRooms(const QDomElement &parent, int parentIdx); void tryGetRoomBoundingBox(const QDomElement &subRoomElem, StructureElement &se); void addElementToRequest(const StructureElement &se, int parentIdx); static InfrastructureManagement::MountingPointType mptFromSubId(int subId); StructureElement getStructureElement(const QDomElement &element) const; template QDomElement getChildElement(const T &parent, const QString &childTag, bool bThrow = true) const; int getInteger(const QDomElement &element, const QString &attribute) const; private: QString m_xmlFilename; QString m_vulnerabilityFilename; QString m_egcuToRoomFilename; QString m_soundAreaFilename; Core::GeoPosition m_geoPosition; double m_rotationAngleDegree; MainStructureElementModifyRequest m_request; QString m_buildingName; QString m_lastError; QVector m_egcus; SoundArea m_soundArea; LOGGER_T m_logger; }; } // namespace InfraStructureManagement