Files
qt5-legatus-legacy/Lts/Services/InfrastructureManagement/WebSocketInterface/Messages/reply_message.cpp
T
2026-08-13 18:33:10 +02:00

330 lines
11 KiB
C++
Executable File

/**
* @RDE_HEADER@
* The ReplyMessage class is an abstract base class for all possible messages which are sent to the client
* $Id$
* $HeadURL$
* $Author$
* Created by Hannes Baeuerle, SLSE, 2016-08-25
*/
#include "reply_message.h"
#include <LtsWebSocket/json_keys.h>
#include "WebSocketInterface/json_keys.h"
#include <QtCore/QUuid>
#include <QtCore/QJsonDocument>
namespace InfrastructureManagement
{
namespace WebSocketInterface
{
namespace Messages
{
using namespace JsonKeys;
using namespace LtsWebSocket::JsonKeys;
// ####### ReplyMessage begin #######
QJsonObject ReplyMessage::LonLatPoint::toJSon() const
{
return {{LONGITUDE(), lon}, {LATITUDE(), lat}};
}
QJsonObject ReplyMessage::Point3d::toJSon() const
{
return {{X(), x}, {Y(), y}, {Z(), z}};
}
QJsonObject ReplyMessage::XYPoint::toJSon() const
{
return {{X(), x}, {Y(), y}};
}
ReplyMessage::ReplyMessage(const QString &type, const int typeId, const QString &uuid)
: LtsWebSocket::ReplyMessage(type, typeId, uuid)
{}
// ####### ReplyMessage end #######
// ####### OkMessage begin #######
OkMessage::OkMessage(const OkMessage::OkData &data)
: ReplyMessage(OK(), 1, QString()) // Todo: Check whether typeId is correct
{
m_jsonRepresentation.insert(DATA(),
QJsonObject({{UUID_(), data.uuid},
{MESSAGE_TYPE(), data.messageType},
{INFO(), data.info}
}));
}
// ####### OkMessage end #######
// ####### RoomMessage begin #######
RoomMessage::RoomMessage(const RoomMessage::RoomData &data, const QString &uuid)
: ReplyMessage(ROOM(), 3, uuid) // Todo: Check whether typeId is correct
{
m_jsonRepresentation.insert(DATA(),
QJsonObject({{PATH(), vecToPath(data.path)},
{ID(), data.id},
{DESIGNATION(), data.designation},
{LEVEL_ID(), data.levelId}
}));
}
// ####### RoomMessage end #######
// ####### AssetData begin #######
QJsonObject AssetData::toJsonObject() const
{
return QJsonObject(
{
{ID(), id},
{ERROR_DESCRIPTION(), errorDescription},
{TIME(), time},
{STATE(), state},
{IP_ADDRESS(), hostname}, // TODO: Fix ICD
{MOUNTING_POINT_ID(), mountingPointId},
{ASSET_TYPE_ID(), assetTypeId},
{ASSET_TAG(), assetTag},
{DESIGNATION(), designation}
});
}
// ####### AssetData end #######
// ####### AreaMessage begin #######
AreaMessage::AreaMessage(const AreaMessage::AreaData &data, const QString &uuid)
: ReplyMessage(AREA(), 4, uuid) // Todo: Check whether typeId is correct
{
m_jsonRepresentation.insert(DATA(),
QJsonObject({{PATH(), vecToPath(data.path)},
{ID(), data.id},
{DESIGNATION(), data.designation},
{TRAINING_AREA_ID(), data.trainingAreaId}
}));
}
// ####### AreaMessage end #######
// ####### AssetStateMessage begin #######
AssetStateMessage::AssetStateMessage(const AssetData &data, const QString &uuid)
: ReplyMessage(ASSET_STATE(), 5, uuid) // Todo: Check whether typeId is correct
{
m_jsonRepresentation.insert(DATA(), {data.toJsonObject()});
}
// ####### AssetStateMessage end #######
// ####### AssetStateMessage begin #######
AssetsMessage::AssetsMessage(const QVector<AssetData> &data,
const QString &uuid)
: ReplyMessage(ASSETS(), 6, uuid) // Todo: Check whether typeId is correct
{
QJsonArray arr;
for (const AssetData &ad : data)
arr += ad.toJsonObject();
m_jsonRepresentation.insert(DATA(), arr);
}
// ####### AssetStateMessage end #######
// ####### AssetStateObjectMessage begin #######
AssetStateObjectMessage::AssetStateObjectMessage(const AssetStateObjectMessage::AssetStateObjectData &data, const QString &uuid)
: ReplyMessage(ASSET_STATE_OBJECT(), 7, uuid) // Todo: Check whether typeId is correct
{
QJsonArray assetStates;
for (const AssetStatesEntry &currentEntry : data.assetStates)
assetStates.append(QJsonObject({{MOUNTING_POINT_ID(), currentEntry.mountingPointId},
{ASSET_ID(), currentEntry.assetId},
{ASSET_TYPE_ID(), currentEntry.assetTypeId},
{IP_ADDRESS(), currentEntry.hostname}, // TODO: Fix ICD
{STATE(), currentEntry.state}
}));
m_jsonRepresentation.insert(DATA(), QJsonObject({{ASSET_STATES(), assetStates},
{OBJECT_ID(), data.objectId},
{TIME(), data.time}
}));
}
// ####### AssetStateObjectMessage end #######
// ####### AssetTypeMessage begin #######
AssetTypeMessage::AssetTypeMessage(const AssetTypeMessage::AssetTypeData &data, const QString &uuid)
: ReplyMessage(ASSET_TYPE(), 8, uuid) // Todo: Check whether typeId is correct
{
m_jsonRepresentation.insert(DATA(), QJsonObject({{ID(), data.id},
{DESIGNATION(), data.designation},
{DEVICE_CLASS(), data.deviceClass}
}));
}
// ####### AssetTypeMessage end #######
// ####### LevelMessage end #######
LevelMessage::LevelMessage(const LevelMessage::LevelData &data, const QString &uuid)
: ReplyMessage(LEVEL(), 9, uuid) // Todo: Check whether typeId is correct
{
m_jsonRepresentation.insert(DATA(), QJsonObject({{Z_POSITION(), data.zPos},
{NUMBER(), data.number},
{OBJECT_ID(), data.objectid},
{DESIGNATION(), data.designation},
{ID(), data.id},
{PATH(), vecToPath(data.path)}
}));
}
// ####### LevelMessage end #######
// ####### MountingPointMessage begin #######
MountingPointMessage::MountingPointMessage(const MountingPointMessage::MountingPointData &data, const QString &uuid)
: ReplyMessage(MOUNTING_POINT(), 10, uuid) // Todo: Check whether typeId is correct
{
QJsonArray supportedAssetTypeIds;
for (int currentId : data.supportedAssetTypIds)
supportedAssetTypeIds.append(currentId);
m_jsonRepresentation.insert(DATA(), QJsonObject({{SUPPORTED_ASSET_TYPE_IDS(), supportedAssetTypeIds},
{POSITION_3D(), data.position3d.toJSon()},
{ID(), data.id},
{DESIGNATION(), data.designation},
{TAG(), data.tag},
{OBJECT_ID(), data.objectId},
{LEVEL_ID(), data.levelId},
{ROOM_ID(), data.roomId},
{ASSET_ID(), data.assetId}
}));
}
// ####### MountingPointMessage end #######
// ####### ObjectMessage begin #######
ObjectMessage::ObjectMessage(const ObjectMessage::ObjectMessageData &data, const QString &uuid)
: ReplyMessage(OBJECT(), 11, uuid) // Todo: Check whether typeId is correct
{
m_jsonRepresentation.insert(DATA(), QJsonObject({{NUMBER(), data.number},
{STREET(), data.street},
{AREA_ID(), data.areaId},
{DESIGNATION(), data.designation},
{ID(), data.id},
{MSE_ID(), data.mseId},
{REF_POINT(), data.refPoint.toJSon()},
{Z(), data.z},
{ROTATION_DEGREE(), data.rotationDegree},
{PATH(), vecToPath(data.path)},
{PATH_RELATIVE(), vecToPath(data.pathRelative)}
}));
}
// ####### ObjectMessage end #######
// ####### ObjectMountingMessage begin #######
ObjectMountingMessage::ObjectMountingMessage(const ObjectMountingMessage::ObjectMountingData &data, const QString &uuid)
: ReplyMessage(OBJECT_MOUNTING(), 12, uuid) // Todo: Check whether typeId is correct
{
QJsonArray planned;
for (const PlannedEntry &currentEntry : data.planned)
planned.append(QJsonObject({{ID(), currentEntry.id},
{ASSET_ID(), currentEntry.assetId},
{PLANNING_STATE(), currentEntry.planningState}
}));
m_jsonRepresentation.insert(DATA(), QJsonObject({{PLANNED(), planned},
{PLANNED_MOUNTING_ID(), data.plannedMountingId},
{OBJECT_ID(), data.objectId}
}));
}
// ####### ObjectMountingMessage end #######
// ####### PlannedMountingMessage begin #######
PlannedMountingMessage::PlannedMountingMessage(const PlannedMountingMessage::PlannedMountingData &data, const QString &uuid)
: ReplyMessage(PLANNED_MOUNTING(), 13, uuid) // Todo: Check whether typeId is correct
{
QJsonArray mounting;
for (const MountingEntry &currentEntry : data.mounting)
mounting.append(QJsonObject({{ID(), currentEntry.id},
{STATE(), currentEntry.state}
}));
m_jsonRepresentation.insert(DATA(), QJsonObject({{MOUNTING(), mounting},
{PLANNED_MOUNTING_ID(), data.plannedMountingId},
{DESIGNATION(), data.designation},
{AREA_ID(), data.areaId}
}));
}
// ####### PlannedMountingMessage end #######
// ####### TrainingAreaMessage begin #######
TrainingAreaMessage::TrainingAreaMessage(const TrainingAreaMessage::TrainingAreaData &data, const QString &uuid)
: ReplyMessage(TRAINING_AREA(), 14, uuid) // Todo: Check whether typeId is correct
{
m_jsonRepresentation.insert(DATA(), QJsonObject({{PATH(), vecToPath(data.path)},
{ID(), data.id},
{DESIGNATION(), data.designation}
}));
}
// ####### TrainingAreaMessage end #######
// ######################### base DL messages #########################
// ####### AssetBaseData begin #######
AssetBaseData::AssetBaseData(const QJsonArray &data, const QString &uuid)
: LtsWebSocket::ReplyMessage (ISM_ASSET_BASE_DATA(), 15, uuid) // Todo: Check whether typeId is correct
{
m_jsonRepresentation.insert(DATA(), data);
}
// ####### AssetBaseData end #######
// ####### MainStructureElementBaseData begin #######
MainStructureElementBaseData::MainStructureElementBaseData(const QJsonArray &data, const QString &uuid)
: LtsWebSocket::ReplyMessage (MAIN_STRUCTURE_ELEMENT_BASE_DATA(), 16, uuid) // Todo: Check whether typeId is correct
{
m_jsonRepresentation.insert(DATA(), data);
}
// ####### MainStructureElementBaseData end #######
// ####### VulnerabilityModelDataBaseData begin #######
VulnerabilityModelDataBaseData::VulnerabilityModelDataBaseData(const QJsonArray &data, const QString &uuid)
: LtsWebSocket::ReplyMessage (VULNERABILITY_MODEL_DATA_BASE_DATA(), 17, uuid) // Todo: Check whether typeId is correct
{
m_jsonRepresentation.insert(DATA(), data);
}
// ####### VulnerabilityModelDataBaseData end #######
// ####### StructureElementBaseData begin #######
StructureElementBaseData::StructureElementBaseData(const QJsonArray &data, const QString &uuid)
: LtsWebSocket::ReplyMessage (STRUCTURE_ELEMENT_BASE_DATA(), 18, uuid) // Todo: Check whether typeId is correct
{
m_jsonRepresentation.insert(DATA(), data);
}
// ####### StructureElementBaseData end #######
// ####### StructureElementFootprintBaseData begin #######
StructureElementFootprintBaseData::StructureElementFootprintBaseData(const QJsonArray &data, const QString &uuid)
: LtsWebSocket::ReplyMessage (STRUCTURE_ELEMENT_FOOTPRINT_BASE_DATA(), 19, uuid) // Todo: Check whether typeId is correct
{
m_jsonRepresentation.insert(DATA(), data);
}
// ####### StructureElementFootprintBaseData end #######
// ####### MountingPointAssetBaseData begin #######
MountingPointAssetBaseData::MountingPointAssetBaseData(const QJsonArray &data, const QString &uuid)
: LtsWebSocket::ReplyMessage (MOUNTING_POINT_ASSET_BASE_DATA(), 20, uuid) // Todo: Check whether typeId is correct
{
m_jsonRepresentation.insert(DATA(), data);
}
// ####### MountingPointAssetBaseData end #######
// ####### MountingPointPlanBaseData begin #######
MountingPointPlanBaseData::MountingPointPlanBaseData(const QJsonArray &data, const QString &uuid)
: LtsWebSocket::ReplyMessage (MOUNTING_POINT_PLAN_BASE_DATA(), 21, uuid) // Todo: Check whether typeId is correct
{
m_jsonRepresentation.insert(DATA(), data);
}
// ####### MountingPointPlanBaseData end #######
// ####### MountingPointScheduleBaseData begin #######
MountingPointScheduleBaseData::MountingPointScheduleBaseData(const QJsonArray &data, const QString &uuid)
: LtsWebSocket::ReplyMessage (MOUNTING_POINT_SCHEDULE_BASE_DATA(), 22, uuid) // Todo: Check whether typeId is correct
{
m_jsonRepresentation.insert(DATA(), data);
}
// ####### MountingPointScheduleBaseData end #######
} // namespace Messages
} // namespace WebSocketInterface
} // namespace Infrastrukture Management