/** * @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()); 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; } //-------------------------------------------------------------------------------------------------------------