/** * @RDE_HEADER@ * ISM Object Structure Element * $Id$ * $HeadURL$ * $Author$ * Created by Iuliana Ojog, SLSE, 2016-11-26 */ #include "main_handler.h" #include "handler_main_structure_element.h" #include "object_main_structure_element.h" #include "object_structure_element.h" #include "base.h" #include "convert_db_to_dds.h" #include using namespace InfrastructureManagement; // ------------------------------------------------------------------------------------------------------- ObjectStructureElement::ObjectStructureElement(MainHandler *mainHandler, ObjectMainStructureElement *objMse) : Base(mainHandler, getLogger("ObjectStructureElement")) , m_objMse(objMse) { m_data.mainStructureElementId = objMse->getId(); } // ------------------------------------------------------------------------------------------------------- ObjectStructureElement::ObjectStructureElement(const StructureElement &data, MainHandler *mainHandler, ObjectMainStructureElement *objMse) : Base(mainHandler, getLogger("ObjectStructureElement")) , m_data(data) , m_objMse(objMse) { m_data.mainStructureElementId = objMse->getId(); } // ------------------------------------------------------------------------------------------------------- bool ObjectStructureElement::isValid() const { return m_data.id > 0; } // ------------------------------------------------------------------------------------------------------- bool ObjectStructureElement::isUsed() const { return m_data.isUsed; } // ------------------------------------------------------------------------------------------------------- Core::FunctionReplyObject ObjectStructureElement::createObject(const Database::IsmStructureElement &dbData) { m_data = Database::convert(dbData); if (m_data.id <= 0) { m_data.isUsed = false; Database::IsmStructureElement dbData2(dbData); if (!db()->insert(dbData2)) return Core::FunctionReplyObject(0, tr_lts("dds", "Error inserting IsmStructureElement-data into database")); m_data.id = dbData2.id; DEBUG_LOG(m_logger) << "New Id: " << m_data.id; } updateGeoPosition(); // Publish Data via DTS //onPublishData(); return Core::FunctionReplyObject(m_data.id); } // ------------------------------------------------------------------------------------------------------- Core::FunctionReplyObject ObjectStructureElement::updateObject(const StructureElement &data) { if (!isValid()) return Core::FunctionReplyObject(data.id, tr_lts("dds", "Object not valid/blocked")); if (!db()->update(toDbData(data))) return Core::FunctionReplyObject(data.id, tr_lts("dds", "Error updating StructureElement with id %1 in database")).arg(data.id); m_data = data; TRACE_LOG(m_logger) << "Data changed for Id: " << m_data.id; updateGeoPosition(); // Publish Data via DTS //onPublishData(); return Core::FunctionReplyObject(m_data.id); } // ------------------------------------------------------------------------------------------------------- Core::FunctionReplyObject ObjectStructureElement::setUsed(bool isUsed) { if (!isValid()) return Core::FunctionReplyObject(m_data.id, tr_lts("dds", "Trying to update an already removed IsmStructureElement object")); m_data.isUsed = isUsed; // Publish Data via DTS //onPublishData(); return Core::FunctionReplyObject(m_data.id); } // ------------------------------------------------------------------------------------------------------- Core::FunctionReplyObject ObjectStructureElement::removeObject() { if (isUsed()) return Core::FunctionReplyObject(m_data.id, tr_lts("dds", "StructureElement still in use")); if (!db()->removeIsmStructureElement(m_data.id)) return Core::FunctionReplyObject(m_data.id, tr_lts("dds", "StructureElement with id %1 can not be removed from DB")).arg(m_data.id); return Core::FunctionReplyObject(m_data.id); } // ------------------------------------------------------------------------------------------------------- void ObjectStructureElement::updateGeoPosition() { if (m_data.mainStructureElementId <= 0) return; const Core::GeoPosition &geoPositionBase = m_objMse->getData().geoPosition; const double angleDegree = m_objMse->getData().angle; updateGeoPosition(LtsCoordTrans::UtmCoordinate::fromGeographic(geoPositionBase.lon, geoPositionBase.lat), geoPositionBase.z, angleDegree); } // ------------------------------------------------------------------------------------------------------- void ObjectStructureElement::updateGeoPosition(const LtsCoordTrans::UtmCoordinate &basePoint, double zBase, double angleDeg) { const QPointF offset = rotatePoint(m_data.relPosition.offsetX, m_data.relPosition.offsetY, angleDeg); const QPointF geoPos = basePoint.geographic(offset); m_data.geoPosition = Core::GeoPosition(geoPos.x(), geoPos.y(), m_data.relPosition.offsetZ + zBase); } // ------------------------------------------------------------------------------------------------------- // convert methods // ------------------------------------------------------------------------------------------------------- // InfrastructureManagement::StructureElement => Database::IsmStructureElement Database::IsmStructureElement ObjectStructureElement::toDbData(const StructureElement &ddsData) { Database::IsmStructureElement dbData; dbData.id = ddsData.id; dbData.name = QString::fromStdString(ddsData.name); dbData.displayName = QString::fromStdString(ddsData.displayName); dbData.mainStructureElementId = ddsData.mainStructureElementId; dbData.structureElementTypeId = ddsData.structureElementTypeId; dbData.path = LtsUtils::IntArray(ddsData.path); dbData.mountingPointId = ddsData.mountingPointId; dbData.barcode = QString::fromStdString(ddsData.barcode); dbData.relPosition = LtsUtils::QPoint3D(ddsData.relPosition.offsetX, ddsData.relPosition.offsetY, ddsData.relPosition.offsetZ); dbData.mountingPointTypeId = ddsData.mountingPointTypeId; dbData.orientation = LtsUtils::QPoint3D(ddsData.orientation.heave, ddsData.orientation.pitch, ddsData.orientation.roll); dbData.properties = QString::fromStdString(ddsData.properties); return dbData; } //-------------------------------------------------------------------------------------------------------------