Add debug logging for directory filtering in make_rpm_ubuntu26.py

- Added logging at root, Lts, and Lts/Proxies levels to trace filtering
- Helps diagnose why TrainingAreaBase is not being copied

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
torstenandCopilot committed 2026-10-09 18:29:09 +00:00
1 parent 3c80b3c6fc
commit 35cda54fd0
343 files changed
+52718 -1634

No files matched your search

@@ -17,19 +17,13 @@ endif()
# Add only existing subdirectories to allow partial checkouts / incremental migration
if(RELEASE_BUILD)
# For first release: build Lts/Common and TrainingAreaBase (for tabTelegrams library)
message(STATUS "RELEASE_BUILD=ON: Building Lts/Common and TrainingAreaBase/tabTelegrams")
# For first release: only build Lts/Common (excludes Tools, Application, DDS, Services, Proxies, Plugins, Viewer, Projects)
message(STATUS "RELEASE_BUILD=ON: Building only Lts/Common")
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Common")
NGL_ADD_SUBDIR_GUARDED(Common)
else()
message(STATUS "Skipping missing Lts subdirectory: Common")
endif()
# TrainingAreaBase needed for tabTelegrams library (used by TetraIF/CoPrtCnv)
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Proxies/TrainingAreaBase")
NGL_ADD_SUBDIR_GUARDED(Proxies/TrainingAreaBase)
else()
message(STATUS "Skipping missing Lts subdirectory: Proxies/TrainingAreaBase")
endif()
else()
set(LTS_SUBDIRS Tools Application DDS Common Services Proxies Plugins Viewer Projects)
foreach(dir IN LISTS LTS_SUBDIRS)
@@ -16,8 +16,10 @@
#include <QtCore/QString>
#include <QtGui/QIcon>
#include <QtWidgets/QScrollArea>
#include <QScroller>
#include <QtWidgets/QAbstractItemView>
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
#include <QScroller>
#endif
#include <functional>
@@ -80,6 +82,7 @@ inline void addTouchScroll(QWidget *widget)
{
if (!widget)
return;
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
widget->setAttribute(Qt::WA_AcceptTouchEvents);
{
@@ -101,6 +104,10 @@ inline void addTouchScroll(QWidget *widget)
return;
}
}
#else
// Qt6: Touch scrolling is enabled by default for scrollable widgets
Q_UNUSED(widget)
#endif
}
enum class ButtonSize
@@ -16,12 +16,10 @@ else()
endif()
# Skip DDS-dependent code generation and plugins for release builds
IF(NOT RELEASE_BUILD)
INCLUDE(MacroRTIDDSGen)
INCLUDE(MacroCodeGenIdl)
ADD_SUBDIRECTORY(Plugins)
ENDIF()
INCLUDE(MacroRTIDDSGen)
INCLUDE(MacroCodeGenIdl)
ADD_SUBDIRECTORY(Plugins)
SET(xml_FILE tab_service.xml)
@@ -66,8 +64,6 @@ endif()
#
# --- Library svcTabCommon --------------------------------------------------------------------------------
#
# Skip for release builds - DDS-dependent service library
IF(NOT RELEASE_BUILD)
SET(SRCS_common
logger.cpp
logger.h
@@ -134,7 +130,6 @@ NGL_TARGET_LINK_LIBRARIES(svcTabCommon
)
ENDIF(BUILD_RTI)
NGL_INSTALL_TARGET(svcTabCommon)
ENDIF() # NOT RELEASE_BUILD
#
# --- Library svcTabClient --------------------------------------------------------------------------------
@@ -16,8 +16,10 @@
#include <QtCore/QString>
#include <QtGui/QIcon>
#include <QtWidgets/QScrollArea>
#include <QScroller>
#include <QtWidgets/QAbstractItemView>
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
#include <QScroller>
#endif
#include <functional>
@@ -80,6 +82,7 @@ inline void addTouchScroll(QWidget *widget)
{
if (!widget)
return;
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
widget->setAttribute(Qt::WA_AcceptTouchEvents);
{
@@ -101,6 +104,10 @@ inline void addTouchScroll(QWidget *widget)
return;
}
}
#else
// Qt6: Touch scrolling is enabled by default for scrollable widgets
Q_UNUSED(widget)
#endif
}
enum class ButtonSize
@@ -0,0 +1,33 @@
#
# $Id$
# $HeadURL$
# $Author:
#
OPTION(BUILD_SVC_HLA "Build service HighLevelArchitecture (default: OFF)" OFF)
OPTION(BUILD_WLS "Build service WirelessLocationSystem (default: OFF)" OFF)
IF(BUILD_RTI)
ADD_SUBDIRECTORY(Buildings)
ADD_SUBDIRECTORY(WarehouseManagement)
ENDIF()
# TrainingAreaBase is a core dependency - always include it when Proxies is included
ADD_SUBDIRECTORY(TrainingAreaBase) # sql
IF(BUILD_RTI)
ADD_SUBDIRECTORY(TrainingAreaBaseOC)
ENDIF()
ADD_SUBDIRECTORY(CombatNetRadio)
ADD_SUBDIRECTORY(DifferentialGPS)
IF(BUILD_RTI)
ADD_SUBDIRECTORY(GuezNasat) # rpcgen
ENDIF()
IF(BUILD_RTI)
ADD_SUBDIRECTORY(ComponentMonitor)
ENDIF()
IF (BUILD_WLS)
ADD_SUBDIRECTORY(WirelessLocationSystem)
ENDIF()
@@ -0,0 +1,11 @@
Proxies
-----------------------------------------------------------------------------
* BLD - Buildings
* HLA - High Level Architecture
* TAB - Training Area Base
* WLS - WirelessLocationService
* WMS - WarehouseManagement
* CNR - Combat Net Radio
* CMO - ComponentMonitor (Monitor InstrumentationAsset vi Nagios/Checkmk)
@@ -0,0 +1,344 @@
#
# $Id$
# $HeadURL$
# $Author$
#
# Uncomment if necessary
#ADD_SUBDIRECTORY(UnitTests)
#ADD_SUBDIRECTORY(ModuleTests)
# Make ${Qt6_Gui} optional
if(QT6_GUI_AVAILABLE AND TARGET Qt6::Gui)
set(Qt6_Gui ${Qt6_Gui})
else()
set(Qt6_Gui "")
endif()
INCLUDE(MacroRTIDDSGen)
INCLUDE(MacroCodeGenIdl)
ADD_SUBDIRECTORY(Plugins)
SET(xml_FILE tab_service.xml)
#
# --- Library tabTelegrams --------------------------------------------------------------------------------
#
find_package(Qt6 COMPONENTS Core Sql Network REQUIRED)
set(_QT_CORE_TARGET Qt6::Core)
set(_QT_SQL_TARGET Qt6::Sql)
set(_QT_NETWORK_TARGET Qt6::Network)
SET(SRCS_telegrams
training_area_telegrams.cpp
training_area_telegrams.h
)
NGL_ADD_LIBRARY(AAR SV WS HLA tabTelegrams STATIC ${SRCS_telegrams})
NGL_TARGET_INCLUDE_DIRECTORIES(tabTelegrams
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/..
)
NGL_TARGET_LINK_LIBRARIES(tabTelegrams
PUBLIC
${_QT_CORE_TARGET}
$<IF:$<AND:$<BOOL:${QT6_GUI_AVAILABLE}>,$<TARGET_EXISTS:Qt6::Gui>>,Qt6::Gui,>
${_QT_NETWORK_TARGET}
)
# install on RPM build and copy for local builds so that LogView automatically finds the training_area_telegrams.h file
if (BUILD_RPM)
add_custom_target(training_area_telegrams.h_bin) # empty target so that LogView still builds on RPM build
NGL_INSTALL(AAR SV FILES training_area_telegrams.h DESTINATION bin)
else()
add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/bin/training_area_telegrams.h
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/training_area_telegrams.h ${CMAKE_BINARY_DIR}/bin/training_area_telegrams.h
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/training_area_telegrams.h
COMMENT "[Local build] Copy training_area_telegrams.h for LogView into bin/"
)
add_custom_target(training_area_telegrams.h_bin DEPENDS ${CMAKE_BINARY_DIR}/bin/training_area_telegrams.h)
endif()
#
# --- Library svcTabCommon --------------------------------------------------------------------------------
#
SET(SRCS_common
logger.cpp
logger.h
tab_export.h
)
IF(BUILD_RTI)
# Generate tab_enums.idl / tab.idl
CODEGEN_IDL_SVC(SRCS_common ${xml_FILE})
# Generate tab_db_impl.cpp/.h, tab_db.h
CODEGEN_DATABASE(SRCS_common ${xml_FILE})
# Generate *.cpp/*.hpp from idl (only with BUILD_RTI)
RTIDDSGEN(SRCS_common tab_enums.idl)
# tab.idl includes pdm.idl, so add explicit dependency on pdm.idl generation
RTIDDSGEN(SRCS_common tab.idl DEPENDS ${CMAKE_BINARY_DIR}/Lts/Services/ProjectDataManagement/pdm.idl)
# Generate tab_dt[s,c]_types.h, tab_ft[s,c]_types.h
CODEGEN_TOPIC_TYPEDEFS(SRCS_common ${xml_FILE})
# generate tab_[d|f]tc.h
CODEGEN_CLIENT_TOPICS_IFC(SRCS_common ${xml_FILE})
ELSE()
# Stub files for BUILD_RTI=OFF - NO code generation
LIST(APPEND SRCS_common
stubs/tab_enums_stub.hpp
stubs/tab_stub.hpp
stubs/tab_db_stub.hpp
stubs/tab_topic_type_plugin_stub.cpp
)
ENDIF()
# Create target only if component flags allow
NGL_ADD_LIBRARY2(AAR SV WS HLA svcTabCommon SHARED ${SRCS_common})
# Generate export header ALWAYS (needed for logger.h even if target not built)
# Use custom command to create minimal export header if target wasn't created
IF(NOT TARGET svcTabCommon)
# Create a dummy static library just for export header generation
ADD_LIBRARY(svcTabCommon STATIC ${SRCS_common})
ENDIF()
GENERATE_EXPORT_HEADER(svcTabCommon EXPORT_FILE_NAME "svctabcommon_export.h")
NGL_TARGET_INCLUDE_DIRECTORIES(svcTabCommon
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/../
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/stubs
)
NGL_TARGET_LINK_LIBRARIES(svcTabCommon
PUBLIC
Qt6::Core
$<IF:$<AND:$<BOOL:${QT6_GUI_AVAILABLE}>,$<TARGET_EXISTS:Qt6::Gui>>,Qt6::Gui,>
Qt6::Sql
Qt6::Network
NGLLogger
ngldb
$<IF:$<TARGET_EXISTS:svcPdmCommon>,svcPdmCommon,>
LtsUtilsCoreHeaderOnly
)
IF(BUILD_RTI)
NGL_TARGET_LINK_LIBRARIES(svcTabCommon
PRIVATE
RTI::nddscpp2
PUBLIC
ddscore
)
ENDIF(BUILD_RTI)
NGL_INSTALL_TARGET(svcTabCommon)
#
# --- Library svcTabClient --------------------------------------------------------------------------------
#
# Skip for release builds - DDS-dependent service library
IF(NOT RELEASE_BUILD)
SET(SRCS_client
tab_export.h
)
IF(BUILD_RTI)
# generate tab_[d|f]tc_impl.[cpp|h]
CODEGEN_CLIENT_TOPICS_IMPL(SRCS_client ${xml_FILE})
ENDIF()
NGL_ADD_LIBRARY2(AAR SV WS HLA svcTabClient SHARED ${SRCS_client})
# NGL_ADD_LIBRARY2 (unlike NGL_ADD_LIBRARY) does not define the
# MAKE_<SYMBOL>_LIB compile guard, but the generated tab_[d|f]tc_impl.h
# headers require MAKE_SVCTABCLIENT_LIB — same situation as
# svcCoreClient/ddscore, which define their guards explicitly.
TARGET_COMPILE_DEFINITIONS(svcTabClient PRIVATE MAKE_SVCTABCLIENT_LIB)
NGL_TARGET_INCLUDE_DIRECTORIES(svcTabClient
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/../
${CMAKE_CURRENT_BINARY_DIR}/../
)
IF(BUILD_RTI)
NGL_TARGET_LINK_LIBRARIES(svcTabClient
PRIVATE
RTI::nddscpp2
ddsconnector
PUBLIC
svcTabCommon
ddsftc
)
ENDIF(BUILD_RTI)
NGL_INSTALL_TARGET(svcTabClient)
ENDIF() # NOT RELEASE_BUILD
#
# --- Library svcTabServer --------------------------------------------------------------------------------
#
# Skip for release builds - DDS-dependent service library
IF(NOT RELEASE_BUILD)
SET(SRCS_server
tx_mixin.cpp
tx_mixin.h
)
IF(BUILD_RTI)
# generate tab_[d|f]ts.h, tab_[d|f]ts_impl.[cpp|h]
CODEGEN_SERVER_TOPICS(SRCS_server ${xml_FILE})
ENDIF()
NGL_ADD_LIBRARY2(AAR HLA SV svcTabServer SHARED ${SRCS_server}) # NGL_ADD_LIBRARY2 won't work here - no time for investigations
# Generated tab_[d|f]ts_impl.h require MAKE_SVCTABSERVER_LIB (see svcTabClient above).
TARGET_COMPILE_DEFINITIONS(svcTabServer PRIVATE MAKE_SVCTABSERVER_LIB)
if(BUILD_SV OR BUILD_HLA)
GENERATE_EXPORT_HEADER(svcTabServer) # FIXME: quick workaround
endif()
NGL_TARGET_INCLUDE_DIRECTORIES(svcTabServer
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/../
${CMAKE_CURRENT_BINARY_DIR}/../
)
NGL_TARGET_LINK_LIBRARIES(svcTabServer
PUBLIC
svcTabCommon
ngldb
${_QT_CORE_TARGET}
$<IF:$<AND:$<BOOL:${QT6_GUI_AVAILABLE}>,$<TARGET_EXISTS:Qt6::Gui>>,Qt6::Gui,>
${_QT_NETWORK_TARGET}
)
IF(BUILD_RTI)
NGL_TARGET_LINK_LIBRARIES(svcTabServer
PRIVATE
RTI::nddscpp2
ddsconnector
ddsfts
)
ENDIF(BUILD_RTI)
NGL_INSTALL_TARGET(svcTabServer)
#
# --- Topic Type Plugin --------------------------------------------------------------
#
IF(BUILD_RTI)
CREATE_TOPIC_TYPE_PLUGIN(${xml_FILE})
ENDIF()
#
# --- RecordReplayPlugin --------------------------------------------------------------
#
IF(BUILD_RTI)
CREATE_RECORD_REPLAY_PLUGIN_SHARED(${xml_FILE})
IF (TARGET tabRecordReplayPlugin)
TARGET_SOURCES(tabRecordReplayPlugin
PRIVATE
tab_record_replay_plugin_custom.cpp
tab_record_replay_plugin_custom.h
)
ENDIF()
ENDIF()
#
# --- Executable svcTrainingAreaBase (sTAB) -------------------------------------------------
#
# Skip for release builds - DDS-dependent executable
IF(NOT RELEASE_BUILD)
SET(SRCS_exe
dds_handler.cpp
dds_handler.h
exm_handler.cpp
exm_handler.h
ism_handler.cpp
ism_handler.h
main.cpp
main_handler.cpp
main_handler.h
pdm_handler.cpp
pdm_handler.h
ppm_handler.cpp
ppm_handler.h
position_handler.cpp
position_handler.h
recv_from_dds_aes.cpp
recv_from_dds_aes.h
recv_from_dds_fts.cpp
recv_from_dds_fts.h
recv_from_tab.h
send_to_dds.cpp
send_to_dds.h
send_to_tab.h
settings.cpp
settings.h
tab_export.h
tab_plugin_interface.h
WebSocketInterface/data_manager.cpp
WebSocketInterface/data_manager.h
WebSocketInterface/json_keys.h
WebSocketInterface/websocket_interface_handler.cpp
WebSocketInterface/websocket_interface_handler.h
WebSocketInterface/Messages/client_message.cpp
WebSocketInterface/Messages/client_message.h
WebSocketInterface/Messages/reply_message.cpp
WebSocketInterface/Messages/reply_message.h
# tx_mixin.cpp
# tx_mixin.h
log4cxx_tab.props
${xml_FILE}
)
IF(BUILD_RTI)
# Generate tab.sql, tab.xml
CODEGEN_SQL(SRCS_exe ${xml_FILE})
ENDIF()
NGL_ADD_SVC_ICON(SRCS_exe)
NGL_ADD_EXECUTABLE(AAR SV svcTrainingAreaBase ${SRCS_exe})
NGL_TARGET_LINK_LIBRARIES(svcTrainingAreaBase
Qt6::Core
Qt6::Network
LtsCoordTrans
LtsWebSocketServer
LtsCommandLineParser
LtsPluginLoader
LtsUtilsCoreHeaderOnly
LtsUtilsCore
svcTabCommon
svcTabServer
# main_handler.cpp includes the generated <TrainingAreaBase/tab_record_replay_plugin.h>
# and directly instantiates TrainingAreaBase::RecordReplayPluginCustom (whose methods
# live in the plugin .so). Linking the plugin target (rather than relying on a full
# `make all` having generated the header first) makes this a proper build dependency:
# the plugin's codegen runs before the exe compiles (so the generated header exists),
# the plugin's PUBLIC build-tree include dir is inherited (so the include resolves),
# and the plugin .so is linked (so the RecordReplayPluginCustom symbols resolve).
$<IF:$<TARGET_EXISTS:tabRecordReplayPlugin>,tabRecordReplayPlugin,>
svcNomClient
svcAesClient
svcOpmClient
svcCoreClient
svcAsmClient
svcExmClient
$<IF:$<TARGET_EXISTS:svcIsmClient>,svcIsmClient,>
svcPdmClient
svcPpmClient
$<IF:$<TARGET_EXISTS:ddsconnector>,ddsconnector,>
nglsettings
ProjectConfig
NGLLogger
nglcoreapplication
ngltools
tabTelegrams
)
NGL_INSTALL_TARGET(svcTrainingAreaBase)
NGL_INSTALL(AAR SV FILES log4cxx_tab.props DESTINATION bin)
NGL_ADD_TARGET_LINK(svcTrainingAreaBase sTAB)
ENDIF() # NOT RELEASE_BUILD
# clientPluginInterface
ADD_LIBRARY(tabPluginInterface INTERFACE)
TARGET_SOURCES(tabPluginInterface INTERFACE
${CMAKE_CURRENT_SOURCE_DIR}/tab_plugin_interface.h
${CMAKE_CURRENT_SOURCE_DIR}/training_area_telegrams.h
)
TARGET_INCLUDE_DIRECTORIES(tabPluginInterface INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/../)
TARGET_LINK_LIBRARIES(tabPluginInterface INTERFACE Qt6::Core $<IF:$<TARGET_EXISTS:svcPdmCommon>,svcPdmCommon,>)
@@ -0,0 +1,118 @@
#
# @RDE_HEADER@
# IsmHandler for WirelessLocationSystem
# $Id: CMakeLists.txt 62899 2024-05-29 11:08:50Z ewert_j $
# $HeadURL: svn://slssvn/TDS/branches/product/features/ufom/Lts/Proxies/TrainingAreaBase/Plugins/UFomHlaJson/CMakeLists.txt $
# $Author: ewert_j $
# Created by Julius Ewert, ESIM, 2024-03-20
#
# Make ${Qt6_WebSockets} optional
if(QT6_GUI_AVAILABLE AND TARGET Qt6::WebSockets)
set(Qt6_WebSockets ${Qt6_WebSockets})
else()
set(Qt6_WebSockets "")
endif()
SET(SRCS_SAA
telegrams.h
telegrams.cpp
generatetelegrams.cpp
generatetelegrams.h
adler_export.h
)
NGL_ADD_LIBRARY2(WS AAR SV HLA saaTelegrams SHARED ${SRCS_SAA})
NGL_INSTALL_TARGET(saaTelegrams)
NGL_TARGET_INCLUDE_DIRECTORIES(saaTelegrams
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/../
${CMAKE_CURRENT_BINARY_DIR}/../
${CMAKE_BINARY_DIR}/Lts/Services
)
NGL_TARGET_LINK_LIBRARIES(saaTelegrams
svcPdmClient # qt5 parity: brings the RTI platform defines (RTI_LINUX etc.)
Qt6::Core
${Qt6_WebSockets}
)
# Ensure PDM IDL files are generated before building saaTelegrams
if(TARGET svcPdmCommon)
add_dependencies(saaTelegrams svcPdmCommon)
endif()
SET(SRCS
logger.cpp
logger.h
main_dispatcher.cpp
main_dispatcher.h
plugin.cpp
plugin.h
json_dispatcher.cpp
json_dispatcher.h
json_handler_rx.cpp
json_handler_rx.h
json_handler_tx.cpp
json_handler_tx.h
ppm_handler.cpp
ppm_handler.h
pdm_handler.cpp
pdm_handler.h
flm_handler.cpp
flm_handler.h
aes_handler.cpp
aes_handler.h
asm_handler.cpp
asm_handler.h
ws_interface.h
ws_handler.h
ws_handler.cpp
saa_interface.h
saa_interface.cpp
settings.cpp
settings.h
)
NGL_ADD_LIBRARY(AAR SV tabPluginAdler MODULE ${SRCS})
NGL_INSTALL_TARGET(tabPluginAdler)
NGL_TARGET_LINK_LIBRARIES(tabPluginAdler
PUBLIC
svcTabServer
NGLLogger
nglsettings
ngltools
Qt6::Core
Qt6::Network
${Qt6_WebSockets}
tabPluginInterface
OpmDataPluginInterface
tabTelegrams
svcTabCommon
svcTabServer
svcPpmClient
svcAsmClient
svcPdmClient
svcExmClient
svcAesClient
svcFlmClient
svcCoreClient
svcNomClient
svcOpmClient
$<IF:$<TARGET_EXISTS:ddsconnector>,ddsconnector,>
LtsUtilsDds
saaTelegrams
Trajectory
)
#
# --- Tests --------------------------------------------------------------
#
IF(BUILD_TESTING)
ADD_SUBDIRECTORY(ModuleTest)
ENDIF()
@@ -0,0 +1,79 @@
c# UFOM HLA Plugin
This is a small documentation of the UFOM HLA TAB Plugin. This document will cover most of the behaviours of the different Telegrams that are supported.
## Change Position
This plugin publishes all changes in position from every Participant that is not external. A "MountActionRequest" will be sent out if an external participant mounts an internal participant ( vehicle ).
- External Participant Mounts Internal Participant -> **MountActionRequest** will be sent.
- External Participant Unmounts from internal participant -> **UnmountActionRequest** will be sent.
- Mounted external participant mounts any internal participant -> **MountActionRequest** will be sent.
> **Note:** No **UnmountActionRequest** will be sent in this case
- Mounted external participant mounts any external participant -> **Nothing** will be sent.
## JSON Telegrams
### UFOMHLA_ADD_PARTICIPANT
ID: 8100
### UFOMHLA_REMOVE_PARTICIPANT
ID: 8101
### UFOMHLA_POSITION_CHANGED
ID: 8102
#### Example:
{
"typeId": 8102,
"type": "UFomHlaPositionChanged",
"data":{
"header": {
"equipmentNumber": 1234,
"timeStamp": 12341234
},
"lon": 1.2341234,
"lat": 1.2341234,
"z": 0
}
}
### UFOMHLA_VULNERABILITY_STATE_CHANGED
ID: 8103
### UFOMHLA_LASER_DESIGNATION
ID: 8104
### UFOMHLA_SEND_CHARGE_TYPES
ID: 8105
### UFOMHLA_PARTICIPANT_MOUNT
ID: 8106
**mountedOn** : Equipment number of the participant to be mounted
#### Example:
{
"typeId": 8101,
"type": "UFomHlaParticipantMount",
"data":{
"header": {
"equipmentNumber": 1234,
"timeStamp": 12341234
},
"mountedOn": 123,
}
}
### UFOMHLA_PARTICIPANT_UNMOUNT
ID: 8107
#### Example:
{
"typeId": 8101,
"type": "UFomHlaParticipantUnmount",
"data":{
"header": {
"equipmentNumber": 1234,
"timeStamp": 12341234
}
}
}
@@ -0,0 +1,23 @@
{
"data": {
"text": "Freier Text"
},
"reciver": "EXCON@GUEZ.DE",
"referenceUuid": "",
"sender": "SAA@GUEZ.DE",
"timestamp": {
"jahr": 2025,
"minuten": 27,
"monat": 5,
"sekunden": 10,
"stunden": 13,
"tag": 16,
"zdm": "ZDM",
"zds": "ZDS",
"zvz": "ZVz"
},
"type": "EX-AQ",
"typeId": 5001,
"uuid": "1f7bcdcf-083e-435f-88b3-6986dcada2b3",
"version": ""
}
@@ -0,0 +1,92 @@
{
"$schema": "http://json-schema.org/schema#",
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"reciver": {
"type": "string"
},
"referenceUuid": {
"type": "string"
},
"sender": {
"type": "string"
},
"timestamp": {
"type": "object",
"properties": {
"jahr": {
"type": "integer"
},
"minuten": {
"type": "integer"
},
"monat": {
"type": "integer"
},
"sekunden": {
"type": "integer"
},
"stunden": {
"type": "integer"
},
"tag": {
"type": "integer"
},
"zdm": {
"type": "string"
},
"zds": {
"type": "string"
},
"zvz": {
"type": "string"
}
},
"required": [
"jahr",
"minuten",
"monat",
"sekunden",
"stunden",
"tag",
"zdm",
"zds",
"zvz"
]
},
"type": {
"type": "string"
},
"typeId": {
"type": "integer"
},
"uuid": {
"type": "string"
},
"version": {
"type": "string"
}
},
"required": [
"data",
"reciver",
"referenceUuid",
"sender",
"timestamp",
"type",
"typeId",
"uuid",
"version"
]
}
@@ -0,0 +1,56 @@
{
"data": {
"feuerkommando": {
"einheit": 5,
"verein": "verein Erkundungsdaten"
},
"koordinate": {
"hoehe": 55,
"koordinate": {
"latitude": 53.3779,
"longitude": 8.758
}
},
"stellungen": {
"waffenplaetze": [
{
"hoehe": 56,
"koordinate": {
"latitude": 53.37791,
"longitude": 8.759
}
},
{
"hoehe": 57,
"koordinate": {
"latitude": 53.37792,
"longitude": 8.76
}
}
],
"wirkungsbereich": {
"grundrichtung": 33,
"links": 44,
"rechts": 55
}
}
},
"reciver": "EXCON@GUEZ.DE",
"referenceUuid": "",
"sender": "SAA@GUEZ.DE",
"timestamp": {
"jahr": 2025,
"minuten": 18,
"monat": 5,
"sekunden": 59,
"stunden": 13,
"tag": 16,
"zdm": "ZDM",
"zds": "ZDS",
"zvz": "ZVz"
},
"type": "EX-Erkundungsergebnisse",
"typeId": 5000,
"uuid": "{f8abc4af-5e65-459d-bd49-89f533fdc900}",
"version": ""
}
@@ -0,0 +1,191 @@
{
"$schema": "http://json-schema.org/schema#",
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"feuerkommando": {
"type": "object",
"properties": {
"einheit": {
"type": "integer"
},
"verein": {
"type": "string"
}
},
"required": [
"einheit",
"verein"
]
},
"koordinate": {
"type": "object",
"properties": {
"hoehe": {
"type": "integer"
},
"koordinate": {
"type": "object",
"properties": {
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"required": [
"latitude",
"longitude"
]
}
},
"required": [
"hoehe",
"koordinate"
]
},
"stellungen": {
"type": "object",
"properties": {
"waffenplaetze": {
"type": "array",
"items": {
"type": "object",
"properties": {
"hoehe": {
"type": "integer"
},
"koordinate": {
"type": "object",
"properties": {
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"required": [
"latitude",
"longitude"
]
}
},
"required": [
"hoehe",
"koordinate"
]
}
},
"wirkungsbereich": {
"type": "object",
"properties": {
"grundrichtung": {
"type": "integer"
},
"links": {
"type": "integer"
},
"rechts": {
"type": "integer"
}
},
"required": [
"grundrichtung",
"links",
"rechts"
]
}
},
"required": [
"waffenplaetze",
"wirkungsbereich"
]
}
},
"required": [
"feuerkommando",
"koordinate",
"stellungen"
]
},
"reciver": {
"type": "string"
},
"referenceUuid": {
"type": "string"
},
"sender": {
"type": "string"
},
"timestamp": {
"type": "object",
"properties": {
"jahr": {
"type": "integer"
},
"minuten": {
"type": "integer"
},
"monat": {
"type": "integer"
},
"sekunden": {
"type": "integer"
},
"stunden": {
"type": "integer"
},
"tag": {
"type": "integer"
},
"zdm": {
"type": "string"
},
"zds": {
"type": "string"
},
"zvz": {
"type": "string"
}
},
"required": [
"jahr",
"minuten",
"monat",
"sekunden",
"stunden",
"tag",
"zdm",
"zds",
"zvz"
]
},
"type": {
"type": "string"
},
"typeId": {
"type": "integer"
},
"uuid": {
"type": "string"
},
"version": {
"type": "string"
}
},
"required": [
"data",
"reciver",
"referenceUuid",
"sender",
"timestamp",
"type",
"typeId",
"uuid",
"version"
]
}
@@ -0,0 +1,30 @@
{
"data": {
"feuerkampf": "feuerHaltDaten",
"kategorie": "FH_E",
"koordinate": {
"latitude": 53.37791,
"longitude": 8.759
},
"radius": 50,
"zpNummer": 5
},
"reciver": "EXCON@GUEZ.DE",
"referenceUuid": "",
"sender": "SAA@GUEZ.DE",
"timestamp": {
"jahr": 2025,
"minuten": 18,
"monat": 5,
"sekunden": 6,
"stunden": 13,
"tag": 16,
"zdm": "ZDM",
"zds": "ZDS",
"zvz": "ZVz"
},
"type": "EX-FH",
"typeId": 1006,
"uuid": "cafed47c-da39-4978-86aa-d126c9d78d8b",
"version": ""
}
@@ -0,0 +1,120 @@
{
"$schema": "http://json-schema.org/schema#",
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"feuerkampf": {
"type": "string"
},
"kategorie": {
"type": "string"
},
"koordinate": {
"type": "object",
"properties": {
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"required": [
"latitude",
"longitude"
]
},
"radius": {
"type": "integer"
},
"zpNummer": {
"type": "integer"
}
},
"required": [
"feuerkampf",
"kategorie",
"koordinate",
"radius",
"zpNummer"
]
},
"reciver": {
"type": "string"
},
"referenceUuid": {
"type": "string"
},
"sender": {
"type": "string"
},
"timestamp": {
"type": "object",
"properties": {
"jahr": {
"type": "integer"
},
"minuten": {
"type": "integer"
},
"monat": {
"type": "integer"
},
"sekunden": {
"type": "integer"
},
"stunden": {
"type": "integer"
},
"tag": {
"type": "integer"
},
"zdm": {
"type": "string"
},
"zds": {
"type": "string"
},
"zvz": {
"type": "string"
}
},
"required": [
"jahr",
"minuten",
"monat",
"sekunden",
"stunden",
"tag",
"zdm",
"zds",
"zvz"
]
},
"type": {
"type": "string"
},
"typeId": {
"type": "integer"
},
"uuid": {
"type": "string"
},
"version": {
"type": "string"
}
},
"required": [
"data",
"reciver",
"referenceUuid",
"sender",
"timestamp",
"type",
"typeId",
"uuid",
"version"
]
}
@@ -0,0 +1,100 @@
{
"data": {
"abfeuerungsArt": "A",
"dauer": 30,
"feuerkampfReferenz": "REF:48271",
"feuerkommando": [
{
"verein": "AB7X",
"wirkmittel": [
{
"auftreffpunkt": {
"hoehe": 0,
"koordinate": {
"latitude": 53.37787,
"longitude": 8.7573
}
},
"flugbahnpunkt": [
{
"xRelativ": 200,
"yRelativ": 77,
"zRelativ": 300,
"zeit": 17
},
{
"xRelativ": 900,
"yRelativ": 177,
"zRelativ": 700,
"zeit": 19
}
],
"flugzeit": 15,
"geschoss": {
"anzahl": 1,
"geschosssorte": "SprengDM121",
"intervall": 1,
"ladung": "M_DM72",
"zuender": "Aufschlag_DM241",
"zuenderFunktion": "AZoV",
"zuenderZeit": 0
},
"gipfelhoehe": 377,
"kenner": 0,
"schussrichtung": 177,
"streuung": {
"peBurstDeflection": 0.7,
"peBurstRange": 0.3,
"peDeflection": 0.7,
"peRange": 7.7
}
}
]
}
],
"forderung": "VER",
"zieldaten": {
"breiteRadius": 25,
"elemente": 1,
"geometrie": "P",
"koordinate": {
"hoehe": 0,
"koordinate": {
"latitude": 53.37787,
"longitude": 8.7573
}
},
"nummer": 7,
"relativKoordinate": {
"hoehe": 5,
"koordinate": {
"latitude": 53.8,
"longitude": 8.8
}
},
"subTyp": "APERS",
"tiefe": 26,
"typ": "EX_L20_PERS",
"zielachse": 17,
"zog": 7
}
},
"receiver": "EXCON@GUEZ.DE",
"referenceUuid": "",
"sender": "SAA@GUEZ.DE",
"timestamp": {
"jahr": 2025,
"minuten": 14,
"monat": 5,
"sekunden": 29,
"stunden": 13,
"tag": 16,
"zdm": "ZDM",
"zds": "ZDS",
"zvz": "ZVz"
},
"type": " EX-FQ(BA-BB-FK)",
"typeId": 1000,
"uuid": "878cda84-c72a-4d57-bb5c-22774856cb22",
"version": ""
}
@@ -0,0 +1,361 @@
{
"$schema": "http://json-schema.org/schema#",
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"abfeuerungsArt": {
"type": "string"
},
"dauer": {
"type": "integer"
},
"feuerkampfReferenz": {
"type": "string"
},
"feuerkommando": {
"type": "array",
"items": {
"type": "object",
"properties": {
"verein": {
"type": "string"
},
"wirkmittel": {
"type": "array",
"items": {
"type": "object",
"properties": {
"auftreffpunkt": {
"type": "object",
"properties": {
"hoehe": {
"type": "integer"
},
"koordinate": {
"type": "object",
"properties": {
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"required": [
"latitude",
"longitude"
]
}
},
"required": [
"hoehe",
"koordinate"
]
},
"flugbahnpunkt": {
"type": "array",
"items": {
"type": "object",
"properties": {
"xRelativ": {
"type": "integer"
},
"yRelativ": {
"type": "integer"
},
"zRelativ": {
"type": "integer"
},
"zeit": {
"type": "integer"
}
},
"required": [
"xRelativ",
"yRelativ",
"zRelativ",
"zeit"
]
}
},
"flugzeit": {
"type": "integer"
},
"geschoss": {
"type": "object",
"properties": {
"anzahl": {
"type": "integer"
},
"geschosssorte": {
"type": "string"
},
"intervall": {
"type": "integer"
},
"ladung": {
"type": "string"
},
"zuender": {
"type": "string"
},
"zuenderFunktion": {
"type": "string"
},
"zuenderZeit": {
"type": "integer"
}
},
"required": [
"anzahl",
"geschosssorte",
"intervall",
"ladung",
"zuender",
"zuenderFunktion",
"zuenderZeit"
]
},
"gipfelhoehe": {
"type": "integer"
},
"kenner": {
"type": "integer"
},
"schussrichtung": {
"type": "integer"
},
"streuung": {
"type": "object",
"properties": {
"peBurstDeflection": {
"type": "number"
},
"peBurstRange": {
"type": "number"
},
"peDeflection": {
"type": "number"
},
"peRange": {
"type": "number"
}
},
"required": [
"peBurstDeflection",
"peBurstRange",
"peDeflection",
"peRange"
]
}
},
"required": [
"auftreffpunkt",
"flugbahnpunkt",
"flugzeit",
"geschoss",
"gipfelhoehe",
"kenner",
"schussrichtung",
"streuung"
]
}
}
},
"required": [
"verein",
"wirkmittel"
]
}
},
"forderung": {
"type": "string"
},
"zieldaten": {
"type": "object",
"properties": {
"breiteRadius": {
"type": "integer"
},
"elemente": {
"type": "integer"
},
"geometrie": {
"type": "string"
},
"koordinate": {
"type": "object",
"properties": {
"hoehe": {
"type": "integer"
},
"koordinate": {
"type": "object",
"properties": {
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"required": [
"latitude",
"longitude"
]
}
},
"required": [
"hoehe",
"koordinate"
]
},
"nummer": {
"type": "integer"
},
"relativKoordinate": {
"type": "object",
"properties": {
"hoehe": {
"type": "integer"
},
"koordinate": {
"type": "object",
"properties": {
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"required": [
"latitude",
"longitude"
]
}
},
"required": [
"hoehe",
"koordinate"
]
},
"subTyp": {
"type": "string"
},
"tiefe": {
"type": "integer"
},
"typ": {
"type": "string"
},
"zielachse": {
"type": "integer"
},
"zog": {
"type": "integer"
}
},
"required": [
"breiteRadius",
"elemente",
"geometrie",
"koordinate",
"nummer",
"relativKoordinate",
"subTyp",
"tiefe",
"typ",
"zielachse",
"zog"
]
}
},
"required": [
"abfeuerungsArt",
"dauer",
"feuerkampfReferenz",
"feuerkommando",
"forderung",
"zieldaten"
]
},
"reciver": {
"type": "string"
},
"referenceUuid": {
"type": "string"
},
"sender": {
"type": "string"
},
"timestamp": {
"type": "object",
"properties": {
"jahr": {
"type": "integer"
},
"minuten": {
"type": "integer"
},
"monat": {
"type": "integer"
},
"sekunden": {
"type": "integer"
},
"stunden": {
"type": "integer"
},
"tag": {
"type": "integer"
},
"zdm": {
"type": "string"
},
"zds": {
"type": "string"
},
"zvz": {
"type": "string"
}
},
"required": [
"jahr",
"minuten",
"monat",
"sekunden",
"stunden",
"tag",
"zdm",
"zds",
"zvz"
]
},
"type": {
"type": "string"
},
"typeId": {
"type": "integer"
},
"uuid": {
"type": "string"
},
"version": {
"type": "string"
}
},
"required": [
"data",
"reciver",
"referenceUuid",
"sender",
"timestamp",
"type",
"typeId",
"uuid",
"version"
]
}
@@ -0,0 +1,25 @@
{
"data": {
"feuerkampfReferenz": "feuerkampfReferenz 1",
"kenner": "C1",
"verein": "AB7X 1"
},
"reciver": "EXCON@GUEZ.DE",
"referenceUuid": "",
"sender": "SAA@GUEZ.DE",
"timestamp": {
"jahr": 2025,
"minuten": 16,
"monat": 5,
"sekunden": 40,
"stunden": 13,
"tag": 16,
"zdm": "ZDM",
"zds": "ZDS",
"zvz": "ZVz"
},
"type": "EX-FQ(FN)",
"typeId": 1003,
"uuid": "0a313781-4d47-44d1-824d-e83ea051f5f1",
"version": ""
}
@@ -0,0 +1,100 @@
{
"$schema": "http://json-schema.org/schema#",
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"feuerkampfReferenz": {
"type": "string"
},
"kenner": {
"type": "string"
},
"verein": {
"type": "string"
}
},
"required": [
"feuerkampfReferenz",
"kenner",
"verein"
]
},
"reciver": {
"type": "string"
},
"referenceUuid": {
"type": "string"
},
"sender": {
"type": "string"
},
"timestamp": {
"type": "object",
"properties": {
"jahr": {
"type": "integer"
},
"minuten": {
"type": "integer"
},
"monat": {
"type": "integer"
},
"sekunden": {
"type": "integer"
},
"stunden": {
"type": "integer"
},
"tag": {
"type": "integer"
},
"zdm": {
"type": "string"
},
"zds": {
"type": "string"
},
"zvz": {
"type": "string"
}
},
"required": [
"jahr",
"minuten",
"monat",
"sekunden",
"stunden",
"tag",
"zdm",
"zds",
"zvz"
]
},
"type": {
"type": "string"
},
"typeId": {
"type": "integer"
},
"uuid": {
"type": "string"
},
"version": {
"type": "string"
}
},
"required": [
"data",
"reciver",
"referenceUuid",
"sender",
"timestamp",
"type",
"typeId",
"uuid",
"version"
]
}
@@ -0,0 +1,45 @@
{
"data": {
"geschoss": {
"geschosssorte": "SprengDM121",
"ladung": "M_DM72",
"zuender": "Aufschlag_DM241",
"zuenderFunktion": "AZoV"
},
"sprenghoehe": 33,
"standort": {
"hoehe": 55,
"koordinate": {
"latitude": 53.37787,
"longitude": 8.7573
}
},
"waffensystem": "MRS",
"winkelgruppe": "Obere",
"zielkoordinate": {
"hoehe": 56,
"koordinate": {
"latitude": 53.37788,
"longitude": 8.7574
}
}
},
"reciver": "EXCON@GUEZ.DE",
"referenceUuid": "",
"sender": "SAA@GUEZ.DE",
"timestamp": {
"jahr": 2025,
"minuten": 23,
"monat": 5,
"sekunden": 6,
"stunden": 13,
"tag": 16,
"zdm": "ZDM",
"zds": "ZDS",
"zvz": "ZVz"
},
"type": "EX-Flugbahnberechnung",
"typeId": 4000,
"uuid": "db2de888-d2bd-4778-bcbc-8dd345c35d18",
"version": ""
}
@@ -0,0 +1,180 @@
{
"$schema": "http://json-schema.org/schema#",
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"geschoss": {
"type": "object",
"properties": {
"geschosssorte": {
"type": "string"
},
"ladung": {
"type": "string"
},
"zuender": {
"type": "string"
},
"zuenderFunktion": {
"type": "string"
}
},
"required": [
"geschosssorte",
"ladung",
"zuender",
"zuenderFunktion"
]
},
"sprenghoehe": {
"type": "integer"
},
"standort": {
"type": "object",
"properties": {
"hoehe": {
"type": "integer"
},
"koordinate": {
"type": "object",
"properties": {
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"required": [
"latitude",
"longitude"
]
}
},
"required": [
"hoehe",
"koordinate"
]
},
"waffensystem": {
"type": "string"
},
"winkelgruppe": {
"type": "string"
},
"zielkoordinate": {
"type": "object",
"properties": {
"hoehe": {
"type": "integer"
},
"koordinate": {
"type": "object",
"properties": {
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"required": [
"latitude",
"longitude"
]
}
},
"required": [
"hoehe",
"koordinate"
]
}
},
"required": [
"geschoss",
"sprenghoehe",
"standort",
"waffensystem",
"winkelgruppe",
"zielkoordinate"
]
},
"reciver": {
"type": "string"
},
"referenceUuid": {
"type": "string"
},
"sender": {
"type": "string"
},
"timestamp": {
"type": "object",
"properties": {
"jahr": {
"type": "integer"
},
"minuten": {
"type": "integer"
},
"monat": {
"type": "integer"
},
"sekunden": {
"type": "integer"
},
"stunden": {
"type": "integer"
},
"tag": {
"type": "integer"
},
"zdm": {
"type": "string"
},
"zds": {
"type": "string"
},
"zvz": {
"type": "string"
}
},
"required": [
"jahr",
"minuten",
"monat",
"sekunden",
"stunden",
"tag",
"zdm",
"zds",
"zvz"
]
},
"type": {
"type": "string"
},
"typeId": {
"type": "integer"
},
"uuid": {
"type": "string"
},
"version": {
"type": "string"
}
},
"required": [
"data",
"reciver",
"referenceUuid",
"sender",
"timestamp",
"type",
"typeId",
"uuid",
"version"
]
}
@@ -0,0 +1,63 @@
{
"data": {
"fallwinkel": 55,
"fehlercode": "MaximaleEntfernung",
"flugbahnpunkt": [
{
"xRelativ": 2.2,
"yRelativ": 3.3,
"zRelativ": 4.4,
"zeit": 1.1
},
{
"xRelativ": 2.3,
"yRelativ": 3.4,
"zRelativ": 4.5,
"zeit": 1.2
}
],
"flugzeit": 300,
"geschoss": {
"geschosssorte": "SprengDM121",
"ladung": "M_DM72",
"ladungsNummer": 5,
"zuender": "Aufschlag_DM241",
"zuenderFunktion": "AZoV",
"zuenderZeit": 1000
},
"gipfelhoehe": 200,
"schussrichtung": 45,
"streuung": {
"peBurstDeflection": 5.5,
"peBurstRange": 4.4,
"peDeflection": 3.3,
"peRange": 2.2
},
"typ": "MRS",
"zielkoordinate": {
"hoehe": 56,
"koordinate": {
"latitude": 53.37788,
"longitude": 8.7574
}
}
},
"reciver": "EXCON@GUEZ.DE",
"referenceUuid": "",
"sender": "SAA@GUEZ.DE",
"timestamp": {
"jahr": 2025,
"minuten": 23,
"monat": 5,
"sekunden": 48,
"stunden": 13,
"tag": 16,
"zdm": "ZDM",
"zds": "ZDS",
"zvz": "ZVz"
},
"type": "EX-Flugbahndaten",
"typeId": 4001,
"uuid": "{8325a2ee-03fc-4d02-8b35-f6f89f574ca2}",
"version": ""
}
@@ -0,0 +1,223 @@
{
"$schema": "http://json-schema.org/schema#",
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"fallwinkel": {
"type": "integer"
},
"fehlercode": {
"type": "string"
},
"flugbahnpunkt": {
"type": "array",
"items": {
"type": "object",
"properties": {
"xRelativ": {
"type": "number"
},
"yRelativ": {
"type": "number"
},
"zRelativ": {
"type": "number"
},
"zeit": {
"type": "number"
}
},
"required": [
"xRelativ",
"yRelativ",
"zRelativ",
"zeit"
]
}
},
"flugzeit": {
"type": "integer"
},
"geschoss": {
"type": "object",
"properties": {
"geschosssorte": {
"type": "string"
},
"ladung": {
"type": "string"
},
"ladungsNummer": {
"type": "integer"
},
"zuender": {
"type": "string"
},
"zuenderFunktion": {
"type": "string"
},
"zuenderZeit": {
"type": "integer"
}
},
"required": [
"geschosssorte",
"ladung",
"ladungsNummer",
"zuender",
"zuenderFunktion",
"zuenderZeit"
]
},
"gipfelhoehe": {
"type": "integer"
},
"schussrichtung": {
"type": "integer"
},
"streuung": {
"type": "object",
"properties": {
"peBurstDeflection": {
"type": "number"
},
"peBurstRange": {
"type": "number"
},
"peDeflection": {
"type": "number"
},
"peRange": {
"type": "number"
}
},
"required": [
"peBurstDeflection",
"peBurstRange",
"peDeflection",
"peRange"
]
},
"typ": {
"type": "string"
},
"zielkoordinate": {
"type": "object",
"properties": {
"hoehe": {
"type": "integer"
},
"koordinate": {
"type": "object",
"properties": {
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"required": [
"latitude",
"longitude"
]
}
},
"required": [
"hoehe",
"koordinate"
]
}
},
"required": [
"fallwinkel",
"fehlercode",
"flugbahnpunkt",
"flugzeit",
"geschoss",
"gipfelhoehe",
"schussrichtung",
"streuung",
"typ",
"zielkoordinate"
]
},
"reciver": {
"type": "string"
},
"referenceUuid": {
"type": "string"
},
"sender": {
"type": "string"
},
"timestamp": {
"type": "object",
"properties": {
"jahr": {
"type": "integer"
},
"minuten": {
"type": "integer"
},
"monat": {
"type": "integer"
},
"sekunden": {
"type": "integer"
},
"stunden": {
"type": "integer"
},
"tag": {
"type": "integer"
},
"zdm": {
"type": "string"
},
"zds": {
"type": "string"
},
"zvz": {
"type": "string"
}
},
"required": [
"jahr",
"minuten",
"monat",
"sekunden",
"stunden",
"tag",
"zdm",
"zds",
"zvz"
]
},
"type": {
"type": "string"
},
"typeId": {
"type": "integer"
},
"uuid": {
"type": "string"
},
"version": {
"type": "string"
}
},
"required": [
"data",
"reciver",
"referenceUuid",
"sender",
"timestamp",
"type",
"typeId",
"uuid",
"version"
]
}
@@ -0,0 +1,58 @@
{
"data": {
"ab": {
"jahr": 2025,
"minuten": 35,
"monat": 11,
"sekunden": 55,
"stunden": 5,
"tag": 12,
"zdm": "ZDM",
"zds": "ZDS",
"zvz": "ZVz"
},
"art": "AO",
"bis": {
"jahr": 2025,
"minuten": 35,
"monat": 11,
"sekunden": 55,
"stunden": 5,
"tag": 13,
"zdm": "ZDM",
"zds": "ZDS",
"zvz": "ZVz"
},
"koordinaten": [
{
"latitude": 53.37792,
"longitude": 8.76
},
{
"latitude": 53.37793,
"longitude": 8.761
}
],
"linkerNachbar": "linker Nachbar",
"name": "Name EX-HQ(G) Führungslinien und Grenzen",
"rechterNachbar": "rechter Nachbar"
},
"reciver": "EXCON@GUEZ.LIVE",
"referenceUuid": "",
"sender": "SAA1@GUEZ.LIVE",
"timestamp": {
"jahr": 2025,
"minuten": 22,
"monat": 5,
"sekunden": 1,
"stunden": 13,
"tag": 16,
"zdm": "ZDM",
"zds": "ZDS",
"zvz": "ZVz"
},
"type": "EX-HQ(G)",
"typeId": 3001,
"uuid": "{8d3aff1f-78ec-4059-bfa0-4b059119e8fa}",
"version": ""
}
@@ -0,0 +1,211 @@
{
"$schema": "http://json-schema.org/schema#",
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"ab": {
"type": "object",
"properties": {
"jahr": {
"type": "integer"
},
"minuten": {
"type": "integer"
},
"monat": {
"type": "integer"
},
"sekunden": {
"type": "integer"
},
"stunden": {
"type": "integer"
},
"tag": {
"type": "integer"
},
"zdm": {
"type": "string"
},
"zds": {
"type": "string"
},
"zvz": {
"type": "string"
}
},
"required": [
"jahr",
"minuten",
"monat",
"sekunden",
"stunden",
"tag",
"zdm",
"zds",
"zvz"
]
},
"art": {
"type": "string"
},
"bis": {
"type": "object",
"properties": {
"jahr": {
"type": "integer"
},
"minuten": {
"type": "integer"
},
"monat": {
"type": "integer"
},
"sekunden": {
"type": "integer"
},
"stunden": {
"type": "integer"
},
"tag": {
"type": "integer"
},
"zdm": {
"type": "string"
},
"zds": {
"type": "string"
},
"zvz": {
"type": "string"
}
},
"required": [
"jahr",
"minuten",
"monat",
"sekunden",
"stunden",
"tag",
"zdm",
"zds",
"zvz"
]
},
"koordinaten": {
"type": "array",
"items": {
"type": "object",
"properties": {
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"required": [
"latitude",
"longitude"
]
}
},
"linkerNachbar": {
"type": "string"
},
"name": {
"type": "string"
},
"rechterNachbar": {
"type": "string"
}
},
"required": [
"ab",
"art",
"bis",
"koordinaten",
"linkerNachbar",
"name",
"rechterNachbar"
]
},
"reciver": {
"type": "string"
},
"referenceUuid": {
"type": "string"
},
"sender": {
"type": "string"
},
"timestamp": {
"type": "object",
"properties": {
"jahr": {
"type": "integer"
},
"minuten": {
"type": "integer"
},
"monat": {
"type": "integer"
},
"sekunden": {
"type": "integer"
},
"stunden": {
"type": "integer"
},
"tag": {
"type": "integer"
},
"zdm": {
"type": "string"
},
"zds": {
"type": "string"
},
"zvz": {
"type": "string"
}
},
"required": [
"jahr",
"minuten",
"monat",
"sekunden",
"stunden",
"tag",
"zdm",
"zds",
"zvz"
]
},
"type": {
"type": "string"
},
"typeId": {
"type": "integer"
},
"uuid": {
"type": "string"
},
"version": {
"type": "string"
}
},
"required": [
"data",
"reciver",
"referenceUuid",
"sender",
"timestamp",
"type",
"typeId",
"uuid",
"version"
]
}
@@ -0,0 +1,63 @@
{
"data": {
"ab": {
"jahr": 2025,
"minuten": 35,
"monat": 11,
"sekunden": 55,
"stunden": 5,
"tag": 12,
"zdm": "ZDM",
"zds": "ZDS",
"zvz": "ZVz"
},
"art": "NFA",
"bis": {
"jahr": 2025,
"minuten": 35,
"monat": 11,
"sekunden": 55,
"stunden": 5,
"tag": 13,
"zdm": "ZDM",
"zds": "ZDS",
"zvz": "ZVz"
},
"koordinaten": [
{
"latitude": 53.37792,
"longitude": 8.76
},
{
"latitude": 53.37793,
"longitude": 8.761
}
],
"maxGipfel": 123,
"mittelpunkt": {
"latitude": 53.37794,
"longitude": 8.762
},
"name": "Name ExHqKoordinierungsmassnahme",
"radius": 66,
"truppenteil": "Truppenteil ExHqKoordinierungsmassnahme"
},
"reciver": "EXCON@GUEZ.DE",
"referenceUuid": "",
"sender": "SAA@GUEZ.DE",
"timestamp": {
"jahr": 2025,
"minuten": 19,
"monat": 5,
"sekunden": 35,
"stunden": 13,
"tag": 16,
"zdm": "ZDM",
"zds": "ZDS",
"zvz": "ZVz"
},
"type": "EX-HQ(K)",
"typeId": 20,
"uuid": "{55cff8e6-2e85-4b92-971f-87ca7afbd214}",
"version": ""
}
@@ -0,0 +1,231 @@
{
"$schema": "http://json-schema.org/schema#",
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"ab": {
"type": "object",
"properties": {
"jahr": {
"type": "integer"
},
"minuten": {
"type": "integer"
},
"monat": {
"type": "integer"
},
"sekunden": {
"type": "integer"
},
"stunden": {
"type": "integer"
},
"tag": {
"type": "integer"
},
"zdm": {
"type": "string"
},
"zds": {
"type": "string"
},
"zvz": {
"type": "string"
}
},
"required": [
"jahr",
"minuten",
"monat",
"sekunden",
"stunden",
"tag",
"zdm",
"zds",
"zvz"
]
},
"art": {
"type": "string"
},
"bis": {
"type": "object",
"properties": {
"jahr": {
"type": "integer"
},
"minuten": {
"type": "integer"
},
"monat": {
"type": "integer"
},
"sekunden": {
"type": "integer"
},
"stunden": {
"type": "integer"
},
"tag": {
"type": "integer"
},
"zdm": {
"type": "string"
},
"zds": {
"type": "string"
},
"zvz": {
"type": "string"
}
},
"required": [
"jahr",
"minuten",
"monat",
"sekunden",
"stunden",
"tag",
"zdm",
"zds",
"zvz"
]
},
"koordinaten": {
"type": "array",
"items": {
"type": "object",
"properties": {
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"required": [
"latitude",
"longitude"
]
}
},
"maxGipfel": {
"type": "integer"
},
"mittelpunkt": {
"type": "object",
"properties": {
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"required": [
"latitude",
"longitude"
]
},
"name": {
"type": "string"
},
"radius": {
"type": "integer"
},
"truppenteil": {
"type": "string"
}
},
"required": [
"ab",
"art",
"bis",
"koordinaten",
"maxGipfel",
"mittelpunkt",
"name",
"radius",
"truppenteil"
]
},
"reciver": {
"type": "string"
},
"referenceUuid": {
"type": "string"
},
"sender": {
"type": "string"
},
"timestamp": {
"type": "object",
"properties": {
"jahr": {
"type": "integer"
},
"minuten": {
"type": "integer"
},
"monat": {
"type": "integer"
},
"sekunden": {
"type": "integer"
},
"stunden": {
"type": "integer"
},
"tag": {
"type": "integer"
},
"zdm": {
"type": "string"
},
"zds": {
"type": "string"
},
"zvz": {
"type": "string"
}
},
"required": [
"jahr",
"minuten",
"monat",
"sekunden",
"stunden",
"tag",
"zdm",
"zds",
"zvz"
]
},
"type": {
"type": "string"
},
"typeId": {
"type": "integer"
},
"uuid": {
"type": "string"
},
"version": {
"type": "string"
}
},
"required": [
"data",
"reciver",
"referenceUuid",
"sender",
"timestamp",
"type",
"typeId",
"uuid",
"version"
]
}
@@ -0,0 +1,71 @@
{
"data": {
"einheit": {
"oi": "F3",
"r": 5,
"verein": "verein ExFeuerstellungFS"
},
"geschosse": [
{
"anzahl": 6,
"geschosssorte": "MineDM72",
"ladung": "X_DM82",
"zuender": "Doppel_DM183"
},
{
"anzahl": 7,
"geschosssorte": "LeuchtDM116",
"ladung": "B_L8A1",
"zuender": "Aufschlag_BB_DM371"
}
],
"koordinaten": [
{
"hoehe": 22,
"koordinate": {
"latitude": 53.37792,
"longitude": 8.76
}
},
{
"hoehe": 23,
"koordinate": {
"latitude": 53.37793,
"longitude": 8.761
}
}
],
"mittelpunkt": {
"hoehe": 20,
"koordinate": {
"latitude": 53.37791,
"longitude": 8.759
}
},
"status": "Einsatzbereit",
"typ": "MRS",
"wirkungsbereich": {
"grundrichtung": 935138399,
"links": 32765,
"rechts": 1788424448
}
},
"reciver": "EXCON@GUEZ.DE",
"referenceUuid": "",
"sender": "SAA@GUEZ.DE",
"timestamp": {
"jahr": 2025,
"minuten": 24,
"monat": 5,
"sekunden": 30,
"stunden": 13,
"tag": 16,
"zdm": "ZDM",
"zds": "ZDS",
"zvz": "ZVz"
},
"type": "EX-SQ(FS)",
"typeId": 2000,
"uuid": "823c5ad1-9542-4bdc-83a5-e342bed3c3a7",
"version": ""
}
@@ -0,0 +1,222 @@
{
"$schema": "http://json-schema.org/schema#",
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"einheit": {
"type": "object",
"properties": {
"oi": {
"type": "string"
},
"r": {
"type": "integer"
},
"verein": {
"type": "string"
}
},
"required": [
"oi",
"r",
"verein"
]
},
"geschosse": {
"type": "array",
"items": {
"type": "object",
"properties": {
"anzahl": {
"type": "integer"
},
"geschosssorte": {
"type": "string"
},
"ladung": {
"type": "string"
},
"zuender": {
"type": "string"
}
},
"required": [
"anzahl",
"geschosssorte",
"ladung",
"zuender"
]
}
},
"koordinaten": {
"type": "array",
"items": {
"type": "object",
"properties": {
"hoehe": {
"type": "integer"
},
"koordinate": {
"type": "object",
"properties": {
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"required": [
"latitude",
"longitude"
]
}
},
"required": [
"hoehe",
"koordinate"
]
}
},
"mittelpunkt": {
"type": "object",
"properties": {
"hoehe": {
"type": "integer"
},
"koordinate": {
"type": "object",
"properties": {
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"required": [
"latitude",
"longitude"
]
}
},
"required": [
"hoehe",
"koordinate"
]
},
"status": {
"type": "string"
},
"typ": {
"type": "string"
},
"wirkungsbereich": {
"type": "object",
"properties": {
"grundrichtung": {
"type": "integer"
},
"links": {
"type": "integer"
},
"rechts": {
"type": "integer"
}
},
"required": [
"grundrichtung",
"links",
"rechts"
]
}
},
"required": [
"einheit",
"geschosse",
"koordinaten",
"mittelpunkt",
"status",
"typ",
"wirkungsbereich"
]
},
"reciver": {
"type": "string"
},
"referenceUuid": {
"type": "string"
},
"sender": {
"type": "string"
},
"timestamp": {
"type": "object",
"properties": {
"jahr": {
"type": "integer"
},
"minuten": {
"type": "integer"
},
"monat": {
"type": "integer"
},
"sekunden": {
"type": "integer"
},
"stunden": {
"type": "integer"
},
"tag": {
"type": "integer"
},
"zdm": {
"type": "string"
},
"zds": {
"type": "string"
},
"zvz": {
"type": "string"
}
},
"required": [
"jahr",
"minuten",
"monat",
"sekunden",
"stunden",
"tag",
"zdm",
"zds",
"zvz"
]
},
"type": {
"type": "string"
},
"typeId": {
"type": "integer"
},
"uuid": {
"type": "string"
},
"version": {
"type": "string"
}
},
"required": [
"data",
"reciver",
"referenceUuid",
"sender",
"timestamp",
"type",
"typeId",
"uuid",
"version"
]
}
@@ -0,0 +1,44 @@
{
"data": {
"geschosse": [
{
"anzahl": 6,
"geschosssorte": "MineDM72",
"ladung": "X_DM82",
"zuender": "Doppel_DM183"
},
{
"anzahl": 7,
"geschosssorte": "LeuchtDM116",
"ladung": "B_L8A1",
"zuender": "Aufschlag_BB_DM371"
}
],
"koordinate": {
"hoehe": 20,
"koordinate": {
"latitude": 53.37791,
"longitude": 8.759
}
},
"typ": "EX_L20_ASSY"
},
"reciver": "EXCON@GUEZ.DE",
"referenceUuid": "",
"sender": "SAA@GUEZ.DE",
"timestamp": {
"jahr": 2025,
"minuten": 26,
"monat": 5,
"sekunden": 1,
"stunden": 13,
"tag": 16,
"zdm": "ZDM",
"zds": "ZDS",
"zvz": "ZVz"
},
"type": "EX-SQ(LP)",
"typeId": 2002,
"uuid": "{b1969847-e672-4157-ac08-82fdecd52fa3}",
"version": ""
}
@@ -0,0 +1,56 @@
{
"data": {
"einheit": {
"oi": "F6",
"r": 6,
"verein": "verein ExFeuerstellungWS"
},
"geschosse": [
{
"anzahl": 6,
"geschosssorte": "MineDM72",
"ladung": "X_DM82",
"zuender": "Doppel_DM183"
},
{
"anzahl": 7,
"geschosssorte": "LeuchtDM116",
"ladung": "B_L8A1",
"zuender": "Aufschlag_BB_DM371"
}
],
"kenner": "B1",
"koordinate": {
"hoehe": 20,
"koordinate": {
"latitude": 53.088354,
"longitude": 8.853092
}
},
"status": "Nicht einsatzbereit",
"typ": "MRS",
"wirkungsbereich": {
"grundrichtung": 1,
"links": 2,
"rechts": 3
}
},
"reciver": "EXCON@GUEZ.LIVE",
"referenceUuid": "",
"sender": "SAA1@GUEZ.LIVE",
"timestamp": {
"jahr": 2025,
"minuten": 25,
"monat": 5,
"sekunden": 12,
"stunden": 13,
"tag": 16,
"zdm": "ZDM",
"zds": "ZDS",
"zvz": "ZVz"
},
"type": "EX-SQ(WS)",
"typeId": 2001,
"uuid": "{caa9482a-2d1f-4893-b569-fae3d3e3f3cf}",
"version": ""
}
@@ -0,0 +1,195 @@
{
"$schema": "http://json-schema.org/schema#",
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"einheit": {
"type": "object",
"properties": {
"oi": {
"type": "string"
},
"r": {
"type": "integer"
},
"verein": {
"type": "string"
}
},
"required": [
"oi",
"r",
"verein"
]
},
"geschosse": {
"type": "array",
"items": {
"type": "object",
"properties": {
"anzahl": {
"type": "integer"
},
"geschosssorte": {
"type": "string"
},
"ladung": {
"type": "string"
},
"zuender": {
"type": "string"
}
},
"required": [
"anzahl",
"geschosssorte",
"ladung",
"zuender"
]
}
},
"kenner": {
"type": "string"
},
"koordinate": {
"type": "object",
"properties": {
"hoehe": {
"type": "integer"
},
"koordinate": {
"type": "object",
"properties": {
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"required": [
"latitude",
"longitude"
]
}
},
"required": [
"hoehe",
"koordinate"
]
},
"status": {
"type": "string"
},
"typ": {
"type": "string"
},
"wirkungsbereich": {
"type": "object",
"properties": {
"grundrichtung": {
"type": "integer"
},
"links": {
"type": "integer"
},
"rechts": {
"type": "integer"
}
},
"required": [
"grundrichtung",
"links",
"rechts"
]
}
},
"required": [
"einheit",
"geschosse",
"kenner",
"koordinate",
"status",
"typ",
"wirkungsbereich"
]
},
"reciver": {
"type": "string"
},
"referenceUuid": {
"type": "string"
},
"sender": {
"type": "string"
},
"timestamp": {
"type": "object",
"properties": {
"jahr": {
"type": "integer"
},
"minuten": {
"type": "integer"
},
"monat": {
"type": "integer"
},
"sekunden": {
"type": "integer"
},
"stunden": {
"type": "integer"
},
"tag": {
"type": "integer"
},
"zdm": {
"type": "string"
},
"zds": {
"type": "string"
},
"zvz": {
"type": "string"
}
},
"required": [
"jahr",
"minuten",
"monat",
"sekunden",
"stunden",
"tag",
"zdm",
"zds",
"zvz"
]
},
"type": {
"type": "string"
},
"typeId": {
"type": "integer"
},
"uuid": {
"type": "string"
},
"version": {
"type": "string"
}
},
"required": [
"data",
"reciver",
"referenceUuid",
"sender",
"timestamp",
"type",
"typeId",
"uuid",
"version"
]
}
@@ -0,0 +1,23 @@
{
"data": {
"status": "Geplant"
},
"reciver": "EXCON@GUEZ.DE",
"referenceUuid": "",
"sender": "SAA@GUEZ.DE",
"timestamp": {
"jahr": 2025,
"minuten": 12,
"monat": 5,
"sekunden": 43,
"stunden": 13,
"tag": 16,
"zdm": "ZDM",
"zds": "ZDS",
"zvz": "ZVz"
},
"type": "EX-Status",
"typeId": 6010,
"uuid": "9c70c8c0-ddc8-4d6f-8385-379faa55d076",
"version": ""
}
@@ -0,0 +1,92 @@
{
"$schema": "http://json-schema.org/schema#",
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"status": {
"type": "string"
}
},
"required": [
"status"
]
},
"reciver": {
"type": "string"
},
"referenceUuid": {
"type": "string"
},
"sender": {
"type": "string"
},
"timestamp": {
"type": "object",
"properties": {
"jahr": {
"type": "integer"
},
"minuten": {
"type": "integer"
},
"monat": {
"type": "integer"
},
"sekunden": {
"type": "integer"
},
"stunden": {
"type": "integer"
},
"tag": {
"type": "integer"
},
"zdm": {
"type": "string"
},
"zds": {
"type": "string"
},
"zvz": {
"type": "string"
}
},
"required": [
"jahr",
"minuten",
"monat",
"sekunden",
"stunden",
"tag",
"zdm",
"zds",
"zvz"
]
},
"type": {
"type": "string"
},
"typeId": {
"type": "integer"
},
"uuid": {
"type": "string"
},
"version": {
"type": "string"
}
},
"required": [
"data",
"reciver",
"referenceUuid",
"sender",
"timestamp",
"type",
"typeId",
"uuid",
"version"
]
}
@@ -0,0 +1,40 @@
---------------------------------------
--- JSON SCHEMA erzeugen:
---------------------------------------
pip install genson
Defaulting to user installation because normal site-packages is not writeable
Collecting genson
Downloading genson-1.3.0-py3-none-any.whl (21 kB)
Installing collected packages: genson
WARNING: The script genson is installed in '/home/ctc/.local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed genson-1.3.0
---------
Aufruf:
genson Wirkfeldplanung.json > Wirkfeldplanung.schema
jq . Wirkfeldplanung.schema > Wirkfeldplanung.schema_formatiert
genson Wirkfeldplanung.json | jq . > Wirkfeldplanung.schema
genson EX-AQ.json | jq . > EX-AQ.struct
genson EX-FH.json | jq . > EX-FH.stuct
genson EX-Flugbahndaten.json | jq . > EX-Flugbahndaten.struct
genson EX-FQ-FN.json | jq . > EX-FQ-FN.struct
genson EX-HQ-K.json | jq . > EX-HQ-K.struct
genson EX-SQ-WS.json | jq . > EX-SQ-WS.struct
genson EX-Erkundungsergebnisse.json | jq . > EX-Erkundungsergebnisse.struct
genson EX-Flugbahnberechnung.json | jq . > EX-Flugbahnberechnung.struct
genson EX-FQ-BA-BB-FK.json | jq . > EX-FQ-BA-BB-FK.struct
genson EX-HQ-G.json | jq . > EX-HQ-G.struct
genson EX-SQ-FS.json | jq . > EX-SQ-FS.struct
genson EX-Status.json | jq . > EX-Status.struct
pip install jsonschema
python3 -m jsonschema -i EX-Erkundungsergebnisse.json EX-Erkundungsergebnisse.struct
@@ -0,0 +1,530 @@
********* Start testing of TestExAnmeldung *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 7.5.0), opensuse-leap 15.4
PASS : TestExAnmeldung::initTestCase()
QDEBUG : TestExAnmeldung::testExAnmeldung() ----------------------
QDEBUG : TestExAnmeldung::testExAnmeldung() --- EX-Anmeldung ---
QSYSTEM: TestExAnmeldung::testExAnmeldung() toJsonInternal
QSYSTEM: TestExAnmeldung::testExAnmeldung() zeitangabe_DTGToJson Stunden= 13
QSYSTEM: TestExAnmeldung::testExAnmeldung() anmeldedatenfromJson
PASS : TestExAnmeldung::testExAnmeldung()
PASS : TestExAnmeldung::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 11ms
********* Finished testing of TestExAnmeldung *********
********* Start testing of TestExAbmeldung *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 7.5.0), opensuse-leap 15.4
PASS : TestExAbmeldung::initTestCase()
QDEBUG : TestExAbmeldung::testExAbmeldung() ----------------------
QDEBUG : TestExAbmeldung::testExAbmeldung() --- EX-Abmeldung ---
QSYSTEM: TestExAbmeldung::testExAbmeldung() EXDeregistration::toJsonInternal partyId= 2
QSYSTEM: TestExAbmeldung::testExAbmeldung() toJsonInternal
QSYSTEM: TestExAbmeldung::testExAbmeldung() zeitangabe_DTGToJson Stunden= 13
QSYSTEM: TestExAbmeldung::testExAbmeldung() abmeldedatenfromJson
PASS : TestExAbmeldung::testExAbmeldung()
PASS : TestExAbmeldung::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 4ms
********* Finished testing of TestExAbmeldung *********
********* Start testing of TestExAnmeldebestaetigung *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 7.5.0), opensuse-leap 15.4
PASS : TestExAnmeldebestaetigung::initTestCase()
QDEBUG : TestExAnmeldebestaetigung::testExAnmeldebestaetuigung() --------------------------------
QDEBUG : TestExAnmeldebestaetigung::testExAnmeldebestaetuigung() --- EX-Anmeldebestaetigung ---
QDEBUG : TestExAnmeldebestaetigung::testExAnmeldebestaetuigung() In SKD kein data enthalten
QSYSTEM: TestExAnmeldebestaetigung::testExAnmeldebestaetuigung() toJsonInternal
QSYSTEM: TestExAnmeldebestaetigung::testExAnmeldebestaetuigung() zeitangabe_DTGToJson Stunden= 13
PASS : TestExAnmeldebestaetigung::testExAnmeldebestaetuigung()
PASS : TestExAnmeldebestaetigung::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 4ms
********* Finished testing of TestExAnmeldebestaetigung *********
********* Start testing of TestExFqWirkfeldplanung *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 7.5.0), opensuse-leap 15.4
PASS : TestExFqWirkfeldplanung::initTestCase()
QDEBUG : TestExFqWirkfeldplanung::testExFqWirkfeldplanung() ---------------------------------------
QDEBUG : TestExFqWirkfeldplanung::testExFqWirkfeldplanung() --- EX-FQ(BA-BB-FK) Wirkfeldplanung ---
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() toJsonInternal
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() zeitangabe_DTGToJson Stunden= 13
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() zieldatenToJson
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() koordinateToJson longitude= 8.7573 latitude= 53.3779
QDEBUG : TestExFqWirkfeldplanung::testExFqWirkfeldplanung() koordinateMitHoeheToJson hoehe= 0
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() koordinateToJson longitude= 8.8 latitude= 53.8
QDEBUG : TestExFqWirkfeldplanung::testExFqWirkfeldplanung() koordinateMitHoeheToJson hoehe= 5
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() zieldatenToJson = "{\n \"breiteRadius\": 25,\n \"elemente\": 1,\n \"geometrie\": \"P\",\n \"koordinate\": {\n \"hoehe\": 0,\n \"koordinate\": {\n \"latitude\": 53.37787,\n \"longitude\": 8.7573\n }\n },\n \"nummer\": 7,\n \"relativKoordinate\": {\n \"hoehe\": 5,\n \"koordinate\": {\n \"latitude\": 53.8,\n \"longitude\": 8.8\n }\n },\n \"subTyp\": \"APERS\",\n \"tiefe\": 26,\n \"typ\": \"EX_L20_PERS\",\n \"zielachse\": 17,\n \"zog\": 7\n}\n"
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() koordinateToJson longitude= 8.7573 latitude= 53.3779
QDEBUG : TestExFqWirkfeldplanung::testExFqWirkfeldplanung() koordinateMitHoeheToJson hoehe= 0
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() wirkfeldplanungDataFromJson
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() wirkfeldplanungData.feuerkampfReferenz= "REF:2078669041"
QDEBUG : TestExFqWirkfeldplanung::testExFqWirkfeldplanung() feuerkommandoArray.size()= 1
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() feuerkommandoFromJson
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() feuerkommando.verein = "AB7X"
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() wirkmittelFeuerkommandoFromJson
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() koordinateMitHoeheFromJson
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() koordinatefromJson
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() koordinatefromJson longitude= 8.7573 latitude= 53.3779
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() koordinateMitHoeheFromJson hoehe= 0
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() feuerkommandoGeschosseFromJson
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() flugbahnpunkteFromJson
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() flugbahnpunktFromJson
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() flugbahnpunktFromJson zeit= 17 punkt= 200 / 77 / 300
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() flugbahnpunktFromJson
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() flugbahnpunktFromJson zeit= 19 punkt= 900 / 177 / 700
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() streuungsdatenfromJson peDeflection= 0.7 peBurstRange= 0.3 peBurstDeflection= 0.7
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() wirkmittel
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() koordinateMitHoeheFromJson
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() koordinatefromJson
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() koordinatefromJson longitude= 8.7573 latitude= 53.3779
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() koordinateMitHoeheFromJson hoehe= 0
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() koordinateMitHoeheFromJson
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() koordinatefromJson
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() koordinatefromJson longitude= 8.8 latitude= 53.8
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() koordinateMitHoeheFromJson hoehe= 5
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() zieldatenfromJson nummer= 7
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() wirkfeldplanungData.abfeuerungsArt= 0
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() wirkfeldplanungData.forderung= 8
QSYSTEM: TestExFqWirkfeldplanung::testExFqWirkfeldplanung() wirkfeldplanungData.dauer= 30
QDEBUG : TestExFqWirkfeldplanung::testExFqWirkfeldplanung() --- Begin compareZieldaten EX-L12 ---
QDEBUG : TestExFqWirkfeldplanung::testExFqWirkfeldplanung() --- koordinate ---
QDEBUG : TestExFqWirkfeldplanung::testExFqWirkfeldplanung() --- relativKoordinate ---
QDEBUG : TestExFqWirkfeldplanung::testExFqWirkfeldplanung() --- End compareZieldaten EX-L12 ---
QDEBUG : TestExFqWirkfeldplanung::testExFqWirkfeldplanung() --- Feuerkommandos: ---
PASS : TestExFqWirkfeldplanung::testExFqWirkfeldplanung()
PASS : TestExFqWirkfeldplanung::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 18ms
********* Finished testing of TestExFqWirkfeldplanung *********
********* Start testing of TestExMqManuelleQuittung *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 7.5.0), opensuse-leap 15.4
PASS : TestExMqManuelleQuittung::initTestCase()
QDEBUG : TestExMqManuelleQuittung::testExMqManuelleQuittung() -------------------------------
QDEBUG : TestExMqManuelleQuittung::testExMqManuelleQuittung() --- EX-MQ Manuelle Quittung ---
QSYSTEM: TestExMqManuelleQuittung::testExMqManuelleQuittung() toJsonInternal
QSYSTEM: TestExMqManuelleQuittung::testExMqManuelleQuittung() zeitangabe_DTGToJson Stunden= 13
QSYSTEM: TestExMqManuelleQuittung::testExMqManuelleQuittung() mqManuelleQuittungDatenToJson
QDEBUG : TestExMqManuelleQuittung::testExMqManuelleQuittung() EX-MQ Manuelle Quittung= "{\n \"data\": {\n \"text\": \"Manuelle Quittung\"\n },\n \"reciver\": \"EXCON@GUEZ.LIVE\",\n \"referenceUuid\": \"\",\n \"sender\": \"SAA1@GUEZ.LIVE\",\n \"timestamp\": {\n \"jahr\": 2025,\n \"minuten\": 11,\n \"monat\": 5,\n \"sekunden\": 10,\n \"stunden\": 13,\n \"tag\": 16,\n \"zdm\": \"ZDM\",\n \"zds\": \"ZDS\",\n \"zvz\": \"ZVz\"\n },\n \"type\": \"EX-MQ\",\n \"typeId\": 1001,\n \"uuid\": \"{4c3f3a79-adfa-440b-927f-7b3b9822e8d3}\",\n \"version\": \"\"\n}\n"
QSYSTEM: TestExMqManuelleQuittung::testExMqManuelleQuittung() mqManuelleQuittungDatenFromJson
PASS : TestExMqManuelleQuittung::testExMqManuelleQuittung()
PASS : TestExMqManuelleQuittung::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 3ms
********* Finished testing of TestExMqManuelleQuittung *********
********* Start testing of TestExFqFeuerbereit *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 7.5.0), opensuse-leap 15.4
PASS : TestExFqFeuerbereit::initTestCase()
QDEBUG : TestExFqFeuerbereit::testExFqFeuerbereit() ---------------------------------------
QDEBUG : TestExFqFeuerbereit::testExFqFeuerbereit() --- EX-FQ(FB) Feuerbereit ---
QSYSTEM: TestExFqFeuerbereit::testExFqFeuerbereit() toJsonInternal
QSYSTEM: TestExFqFeuerbereit::testExFqFeuerbereit() zeitangabe_DTGToJson Stunden= 13
QDEBUG : TestExFqFeuerbereit::testExFqFeuerbereit() feuerbereitMessage= "{\n \"data\": {\n \"feuerkampfReferenz\": \"feuerkampfReferenz 1\",\n \"kenner\": \"C1\",\n \"verein\": \"AB7X 1\"\n },\n \"reciver\": \"EXCON@GUEZ.LIVE\",\n \"referenceUuid\": \"\",\n \"sender\": \"SAA1@GUEZ.LIVE\",\n \"timestamp\": {\n \"jahr\": 2025,\n \"minuten\": 11,\n \"monat\": 5,\n \"sekunden\": 10,\n \"stunden\": 13,\n \"tag\": 16,\n \"zdm\": \"ZDM\",\n \"zds\": \"ZDS\",\n \"zvz\": \"ZVz\"\n },\n \"type\": \"EX-FQ(FB)\",\n \"typeId\": 1002,\n \"uuid\": \"{af2effb4-e526-4738-aeb6-d8dc47995ce0}\",\n \"version\": \"\"\n}\n"
QSYSTEM: TestExFqFeuerbereit::testExFqFeuerbereit() feuerkampfdatenFromJson feuerkampfReferenz= "feuerkampfReferenz 1" verein= "AB7X 1" kenner= 34 ' "C1" '
PASS : TestExFqFeuerbereit::testExFqFeuerbereit()
PASS : TestExFqFeuerbereit::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 3ms
********* Finished testing of TestExFqFeuerbereit *********
********* Start testing of TestExFqFeuern *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 7.5.0), opensuse-leap 15.4
PASS : TestExFqFeuern::initTestCase()
QDEBUG : TestExFqFeuern::testExFqFeuern() ---------------------------------------
QDEBUG : TestExFqFeuern::testExFqFeuern() --- EX-FQ(FN) Feuern ---
QSYSTEM: TestExFqFeuern::testExFqFeuern() toJsonInternal
QSYSTEM: TestExFqFeuern::testExFqFeuern() zeitangabe_DTGToJson Stunden= 13
QDEBUG : TestExFqFeuern::testExFqFeuern() feuerbereitMessage= "{\n \"data\": {\n \"feuerkampfReferenz\": \"feuerkampfReferenz 1\",\n \"kenner\": \"C1\",\n \"verein\": \"AB7X 1\"\n },\n \"reciver\": \"EXCON@GUEZ.LIVE\",\n \"referenceUuid\": \"\",\n \"sender\": \"SAA1@GUEZ.LIVE\",\n \"timestamp\": {\n \"jahr\": 2025,\n \"minuten\": 11,\n \"monat\": 5,\n \"sekunden\": 10,\n \"stunden\": 13,\n \"tag\": 16,\n \"zdm\": \"ZDM\",\n \"zds\": \"ZDS\",\n \"zvz\": \"ZVz\"\n },\n \"type\": \"EX-FQ(FN)\",\n \"typeId\": 1003,\n \"uuid\": \"{b4400874-c540-4331-8ee7-97e31c1f74b9}\",\n \"version\": \"\"\n}\n"
QSYSTEM: TestExFqFeuern::testExFqFeuern() feuerkampfdatenFromJson feuerkampfReferenz= "feuerkampfReferenz 1" verein= "AB7X 1" kenner= 34 ' "C1" '
PASS : TestExFqFeuern::testExFqFeuern()
PASS : TestExFqFeuern::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 2ms
********* Finished testing of TestExFqFeuern *********
********* Start testing of TestExFqAbgefeuert *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 7.5.0), opensuse-leap 15.4
PASS : TestExFqAbgefeuert::initTestCase()
QDEBUG : TestExFqAbgefeuert::testExFqAbgefeuert() ---------------------------------------
QDEBUG : TestExFqAbgefeuert::testExFqAbgefeuert() --- EX-FQ(AF) Abgefeuert ---
QSYSTEM: TestExFqAbgefeuert::testExFqAbgefeuert() toJsonInternal
QSYSTEM: TestExFqAbgefeuert::testExFqAbgefeuert() zeitangabe_DTGToJson Stunden= 13
QDEBUG : TestExFqAbgefeuert::testExFqAbgefeuert() abgefeuertMessage= "{\n \"data\": {\n \"feuerkampfReferenz\": \"feuerkampfReferenz 1\",\n \"kenner\": \"C1\",\n \"verein\": \"AB7X 1\"\n },\n \"reciver\": \"EXCON@GUEZ.LIVE\",\n \"referenceUuid\": \"\",\n \"sender\": \"SAA1@GUEZ.LIVE\",\n \"timestamp\": {\n \"jahr\": 2025,\n \"minuten\": 11,\n \"monat\": 5,\n \"sekunden\": 10,\n \"stunden\": 13,\n \"tag\": 16,\n \"zdm\": \"ZDM\",\n \"zds\": \"ZDS\",\n \"zvz\": \"ZVz\"\n },\n \"type\": \"EX-FQ(AF)\",\n \"typeId\": 1004,\n \"uuid\": \"{65201036-324f-4f20-ace9-aa12189b2e0d}\",\n \"version\": \"\"\n}\n"
QSYSTEM: TestExFqAbgefeuert::testExFqAbgefeuert() feuerkampfdatenFromJson feuerkampfReferenz= "feuerkampfReferenz 1" verein= "AB7X 1" kenner= 34 ' "C1" '
PASS : TestExFqAbgefeuert::testExFqAbgefeuert()
PASS : TestExFqAbgefeuert::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 2ms
********* Finished testing of TestExFqAbgefeuert *********
********* Start testing of TestExFqVollzugsmeldung *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 7.5.0), opensuse-leap 15.4
PASS : TestExFqVollzugsmeldung::initTestCase()
QDEBUG : TestExFqVollzugsmeldung::testExFqVollzugsmeldung() ---------------------------------------
QDEBUG : TestExFqVollzugsmeldung::testExFqVollzugsmeldung() --- EX-FQ(VM) Vollzugsmeldung ---
QSYSTEM: TestExFqVollzugsmeldung::testExFqVollzugsmeldung() toJsonInternal
QSYSTEM: TestExFqVollzugsmeldung::testExFqVollzugsmeldung() zeitangabe_DTGToJson Stunden= 13
QDEBUG : TestExFqVollzugsmeldung::testExFqVollzugsmeldung() generateVollzugsmeldungMessage= "{\n \"data\": {\n \"feuerkampfReferenz\": \"feuerkampfReferenz 1\",\n \"kenner\": \"C1\",\n \"verein\": \"AB7X 1\"\n },\n \"reciver\": \"EXCON@GUEZ.LIVE\",\n \"referenceUuid\": \"\",\n \"sender\": \"SAA1@GUEZ.LIVE\",\n \"timestamp\": {\n \"jahr\": 2025,\n \"minuten\": 11,\n \"monat\": 5,\n \"sekunden\": 10,\n \"stunden\": 13,\n \"tag\": 16,\n \"zdm\": \"ZDM\",\n \"zds\": \"ZDS\",\n \"zvz\": \"ZVz\"\n },\n \"type\": \"EX-FQ(VM)\",\n \"typeId\": 1005,\n \"uuid\": \"{3fc7bcc0-5e85-4f12-b8f1-1e1043ff6264}\",\n \"version\": \"\"\n}\n"
QSYSTEM: TestExFqVollzugsmeldung::testExFqVollzugsmeldung() feuerkampfdatenFromJson feuerkampfReferenz= "feuerkampfReferenz 1" verein= "AB7X 1" kenner= 34 ' "C1" '
PASS : TestExFqVollzugsmeldung::testExFqVollzugsmeldung()
PASS : TestExFqVollzugsmeldung::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 2ms
********* Finished testing of TestExFqVollzugsmeldung *********
********* Start testing of TestExFqFeuerkampf *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 7.5.0), opensuse-leap 15.4
PASS : TestExFqFeuerkampf::initTestCase()
QDEBUG : TestExFqFeuerkampf::testExFqFeuerkampf() -------------------------------
QDEBUG : TestExFqFeuerkampf::testExFqFeuerkampf() --- EX-FQ(BA-BB) Feuerkampf ---
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() toJsonInternal
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() zeitangabe_DTGToJson Stunden= 13
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf()
zielmeldedatenToJson
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() zieldatenToJson
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() koordinateToJson longitude= 8.7573 latitude= 53.3779
QDEBUG : TestExFqFeuerkampf::testExFqFeuerkampf() koordinateMitHoeheToJson hoehe= 0
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() koordinateToJson longitude= 8.8 latitude= 53.8
QDEBUG : TestExFqFeuerkampf::testExFqFeuerkampf() koordinateMitHoeheToJson hoehe= 5
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() zieldatenToJson = "{\n \"breiteRadius\": 25,\n \"elemente\": 1,\n \"geometrie\": \"P\",\n \"koordinate\": {\n \"hoehe\": 0,\n \"koordinate\": {\n \"latitude\": 53.37787,\n \"longitude\": 8.7573\n }\n },\n \"nummer\": 7,\n \"relativKoordinate\": {\n \"hoehe\": 5,\n \"koordinate\": {\n \"latitude\": 53.8,\n \"longitude\": 8.8\n }\n },\n \"subTyp\": \"APERS\",\n \"tiefe\": 26,\n \"typ\": \"EX_L20_PERS\",\n \"zielachse\": 17,\n \"zog\": 7\n}\n"
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() data = "{\n \"Gerlinde\": \"Rudolphus\",\n \"zieldaten\": {\n \"breiteRadius\": 25,\n \"elemente\": 1,\n \"geometrie\": \"P\",\n \"koordinate\": {\n \"hoehe\": 0,\n \"koordinate\": {\n \"latitude\": 53.37787,\n \"longitude\": 8.7573\n }\n },\n \"nummer\": 7,\n \"relativKoordinate\": {\n \"hoehe\": 5,\n \"koordinate\": {\n \"latitude\": 53.8,\n \"longitude\": 8.8\n }\n },\n \"subTyp\": \"APERS\",\n \"tiefe\": 26,\n \"typ\": \"EX_L20_PERS\",\n \"zielachse\": 17,\n \"zog\": 7\n }\n}\n"
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() objZieldaten = "{\n \"breiteRadius\": 25,\n \"elemente\": 1,\n \"geometrie\": \"P\",\n \"koordinate\": {\n \"hoehe\": 0,\n \"koordinate\": {\n \"latitude\": 53.37787,\n \"longitude\": 8.7573\n }\n },\n \"nummer\": 7,\n \"relativKoordinate\": {\n \"hoehe\": 5,\n \"koordinate\": {\n \"latitude\": 53.8,\n \"longitude\": 8.8\n }\n },\n \"subTyp\": \"APERS\",\n \"tiefe\": 26,\n \"typ\": \"EX_L20_PERS\",\n \"zielachse\": 17,\n \"zog\": 7\n}\n"
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() koordinateToJson longitude= 8.759 latitude= 53.3779
QDEBUG : TestExFqFeuerkampf::testExFqFeuerkampf() koordinateMitHoeheToJson hoehe= 56
QDEBUG : TestExFqFeuerkampf::testExFqFeuerkampf() feuerkampfMessage= "{\n \"data\": {\n \"Gerlinde\": \"Rudolphus\",\n \"abfeuerungsArt\": \"F\",\n \"dauer\": 88,\n \"feuerkommando\": [\n {\n \"verein\": \"verein Feuerkommando\",\n \"wirkmittel\": [\n {\n \"auftreffpunkt\": {\n \"hoehe\": 56,\n \"koordinate\": {\n \"latitude\": 53.37791,\n \"longitude\": 8.759\n }\n },\n \"flugbahnpunkt\": [\n {\n \"xRelativ\": 200,\n \"yRelativ\": 77,\n \"zRelativ\": 300,\n \"zeit\": 17\n },\n {\n \"xRelativ\": 900,\n \"yRelativ\": 177,\n \"zRelativ\": 700,\n \"zeit\": 19\n }\n ],\n \"flugzeit\": 77,\n \"geschoss\": {\n \"anzahl\": 1,\n \"geschosssorte\": \"SprengDM121\",\n \"intervall\": 1,\n \"ladung\": \"M_DM72\",\n \"zuender\": \"Aufschlag_DM241\",\n \"zuenderFunktion\": \"AZoV\",\n \"zuenderZeit\": 0\n },\n \"gipfelhoehe\": 78,\n \"kenner\": 35,\n \"schussrichtung\": 79,\n \"streuung\": {\n \"peBurstDeflection\": 4.9754626068813906e-295,\n \"peBurstRange\": 0,\n \"peDeflection\": 0,\n \"peRange\": 0\n }\n }\n ]\n }\n ],\n \"forderung\": \"BEL\",\n \"zieldaten\": {\n \"breiteRadius\": 25,\n \"elemente\": 1,\n \"geometrie\": \"P\",\n \"koordinate\": {\n \"hoehe\": 0,\n \"koordinate\": {\n \"latitude\": 53.37787,\n \"longitude\": 8.7573\n }\n },\n \"nummer\": 7,\n \"relativKoordinate\": {\n \"hoehe\": 5,\n \"koordinate\": {\n \"latitude\": 53.8,\n \"longitude\": 8.8\n }\n },\n \"subTyp\": \"APERS\",\n \"tiefe\": 26,\n \"typ\": \"EX_L20_PERS\",\n \"zielachse\": 17,\n \"zog\": 7\n }\n },\n \"reciver\": \"EXCON@GUEZ.LIVE\",\n \"referenceUuid\": \"\",\n \"sender\": \"SAA1@GUEZ.LIVE\",\n \"timestamp\": {\n \"jahr\": 2025,\n \"minuten\": 11,\n \"monat\": 5,\n \"sekunden\": 10,\n \"stunden\": 13,\n \"tag\": 16,\n \"zdm\": \"ZDM\",\n \"zds\": \"ZDS\",\n \"zvz\": \"ZVz\"\n },\n \"type\": \"EX-FQ(BA-BB)\",\n \"typeId\": 19,\n \"uuid\": \"{c49b453f-b389-4db5-88fc-f33b67248497}\",\n \"version\": \"\"\n}\n"
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() zielmeldedatenFromJson
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() koordinateMitHoeheFromJson
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() koordinatefromJson
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() koordinatefromJson longitude= 8.7573 latitude= 53.3779
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() koordinateMitHoeheFromJson hoehe= 0
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() koordinateMitHoeheFromJson
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() koordinatefromJson
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() koordinatefromJson longitude= 8.8 latitude= 53.8
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() koordinateMitHoeheFromJson hoehe= 5
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() zieldatenfromJson nummer= 7
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() feuerkommandoFromJson
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() feuerkommando.verein = "verein Feuerkommando"
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() wirkmittelFeuerkommandoFromJson
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() koordinateMitHoeheFromJson
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() koordinatefromJson
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() koordinatefromJson longitude= 8.759 latitude= 53.3779
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() koordinateMitHoeheFromJson hoehe= 56
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() feuerkommandoGeschosseFromJson
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() flugbahnpunkteFromJson
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() flugbahnpunktFromJson
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() flugbahnpunktFromJson zeit= 17 punkt= 200 / 77 / 300
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() flugbahnpunktFromJson
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() flugbahnpunktFromJson zeit= 19 punkt= 900 / 177 / 700
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() streuungsdatenfromJson peDeflection= 0 peBurstRange= 0 peBurstDeflection= 4.97546e-295
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() wirkmittel
QSYSTEM: TestExFqFeuerkampf::testExFqFeuerkampf() wirkmittel
QDEBUG : TestExFqFeuerkampf::testExFqFeuerkampf() --- Compare EX-Zielmeldedaten ---
QDEBUG : TestExFqFeuerkampf::testExFqFeuerkampf() --- Begin compareZieldaten EX-L12 ---
QDEBUG : TestExFqFeuerkampf::testExFqFeuerkampf() --- koordinate ---
QDEBUG : TestExFqFeuerkampf::testExFqFeuerkampf() --- relativKoordinate ---
QDEBUG : TestExFqFeuerkampf::testExFqFeuerkampf() --- End compareZieldaten EX-L12 ---
PASS : TestExFqFeuerkampf::testExFqFeuerkampf()
PASS : TestExFqFeuerkampf::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 7ms
********* Finished testing of TestExFqFeuerkampf *********
********* Start testing of TestExFeuerhalt *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 7.5.0), opensuse-leap 15.4
PASS : TestExFeuerhalt::initTestCase()
QDEBUG : TestExFeuerhalt::testExFeuerhalt() ------------------------
QDEBUG : TestExFeuerhalt::testExFeuerhalt() --- EX-FH Feuer HALT ---
QSYSTEM: TestExFeuerhalt::testExFeuerhalt() toJsonInternal
QSYSTEM: TestExFeuerhalt::testExFeuerhalt() zeitangabe_DTGToJson Stunden= 13
QSYSTEM: TestExFeuerhalt::testExFeuerhalt() feuerHaltDatenToJson
QSYSTEM: TestExFeuerhalt::testExFeuerhalt() koordinateToJson longitude= 8.759 latitude= 53.3779
QDEBUG : TestExFeuerhalt::testExFeuerhalt() feuerhaltMessage= "{\n \"data\": {\n \"feuerkampf\": \"feuerHaltDaten\",\n \"kategorie\": \"FH_E\",\n \"koordinate\": {\n \"latitude\": 53.37791,\n \"longitude\": 8.759\n },\n \"radius\": 50,\n \"zpNummer\": 5\n },\n \"reciver\": \"EXCON@GUEZ.LIVE\",\n \"referenceUuid\": \"\",\n \"sender\": \"SAA1@GUEZ.LIVE\",\n \"timestamp\": {\n \"jahr\": 2025,\n \"minuten\": 11,\n \"monat\": 5,\n \"sekunden\": 10,\n \"stunden\": 13,\n \"tag\": 16,\n \"zdm\": \"ZDM\",\n \"zds\": \"ZDS\",\n \"zvz\": \"ZVz\"\n },\n \"type\": \"EX-FH\",\n \"typeId\": 1006,\n \"uuid\": \"{c4ea1b11-c132-4a9f-a4e8-2332d0f831f9}\",\n \"version\": \"\"\n}\n"
QSYSTEM: TestExFeuerhalt::testExFeuerhalt() feuerHaltDatenFromJson
QSYSTEM: TestExFeuerhalt::testExFeuerhalt() koordinatefromJson
QSYSTEM: TestExFeuerhalt::testExFeuerhalt() koordinatefromJson longitude= 8.759 latitude= 53.3779
PASS : TestExFeuerhalt::testExFeuerhalt()
PASS : TestExFeuerhalt::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 2ms
********* Finished testing of TestExFeuerhalt *********
********* Start testing of TestExStellungsmeldungFS *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 7.5.0), opensuse-leap 15.4
PASS : TestExStellungsmeldungFS::initTestCase()
QDEBUG : TestExStellungsmeldungFS::testExStellungsmeldungFS() ------------------------------------------------
QDEBUG : TestExStellungsmeldungFS::testExStellungsmeldungFS() --- EX-SQ(FS) Stellungsmeldung Feuerstellung ---
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() toJsonInternal
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() zeitangabe_DTGToJson Stunden= 13
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() feuerstellungsdatenToJson
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() einheitToJson einheit.oi= 3
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() koordinateToJson longitude= 8.759 latitude= 53.3779
QDEBUG : TestExStellungsmeldungFS::testExStellungsmeldungFS() koordinateMitHoeheToJson hoehe= 20
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() koordinateToJson longitude= 8.76 latitude= 53.3779
QDEBUG : TestExStellungsmeldungFS::testExStellungsmeldungFS() koordinateMitHoeheToJson hoehe= 22
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() koordinateToJson longitude= 8.761 latitude= 53.3779
QDEBUG : TestExStellungsmeldungFS::testExStellungsmeldungFS() koordinateMitHoeheToJson hoehe= 23
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() geschossToJson geschosssorte= 17 ladung= 2 zuender= 10 anzahl= 6
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() geschossToJson geschosssorte= 1 ladung= 0 zuender= 2 anzahl= 7
QDEBUG : TestExStellungsmeldungFS::testExStellungsmeldungFS() EX-SQ(FS) Stellungsmeldung Feuerstellung= "{\n \"data\": {\n \"einheit\": {\n \"oi\": \"F3\",\n \"r\": 5,\n \"verein\": \"verein ExFeuerstellungFS\"\n },\n \"geschosse\": [\n {\n \"anzahl\": 6,\n \"geschosssorte\": \"MineDM72\",\n \"ladung\": \"X_DM82\",\n \"zuender\": \"Doppel_DM183\"\n },\n {\n \"anzahl\": 7,\n \"geschosssorte\": \"LeuchtDM116\",\n \"ladung\": \"B_L8A1\",\n \"zuender\": \"Aufschlag_BB_DM371\"\n }\n ],\n \"koordinaten\": [\n {\n \"hoehe\": 22,\n \"koordinate\": {\n \"latitude\": 53.37792,\n \"longitude\": 8.76\n }\n },\n {\n \"hoehe\": 23,\n \"koordinate\": {\n \"latitude\": 53.37793,\n \"longitude\": 8.761\n }\n }\n ],\n \"mittelpunkt\": {\n \"hoehe\": 20,\n \"koordinate\": {\n \"latitude\": 53.37791,\n \"longitude\": 8.759\n }\n },\n \"status\": \"Einsatzbereit\",\n \"typ\": \"MRS\",\n \"wirkungsbereich\": {\n \"grundrichtung\": 6868481,\n \"links\": 0,\n \"rechts\": 4240192\n }\n },\n \"reciver\": \"EXCON@GUEZ.LIVE\",\n \"referenceUuid\": \"\",\n \"sender\": \"SAA1@GUEZ.LIVE\",\n \"timestamp\": {\n \"jahr\": 2025,\n \"minuten\": 11,\n \"monat\": 5,\n \"sekunden\": 10,\n \"stunden\": 13,\n \"tag\": 16,\n \"zdm\": \"ZDM\",\n \"zds\": \"ZDS\",\n \"zvz\": \"ZVz\"\n },\n \"type\": \"EX-SQ(FS)\",\n \"typeId\": 2000,\n \"uuid\": \"{0556fcc8-7126-4778-b4ce-acb6ffcbf5f2}\",\n \"version\": \"\"\n}\n"
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() feuerstellungsdatenFromJson
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() einheitfromJson
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() koordinateMitHoeheFromJson
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() koordinatefromJson
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() koordinatefromJson longitude= 8.759 latitude= 53.3779
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() koordinateMitHoeheFromJson hoehe= 20
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() koordinateMitHoeheFromJson
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() koordinatefromJson
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() koordinatefromJson longitude= 8.76 latitude= 53.3779
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() koordinateMitHoeheFromJson hoehe= 22
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() koordinateMitHoeheFromJson
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() koordinatefromJson
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() koordinatefromJson longitude= 8.761 latitude= 53.3779
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() koordinateMitHoeheFromJson hoehe= 23
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() geschossefromJson
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() geschosssorte= ' QJsonValue(string, "MineDM72") '
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() geschossefromJson geschosssorte= 17 ladung= 2 zuender= 10 anzahl= 6
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() geschossefromJson
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() geschosssorte= ' QJsonValue(string, "LeuchtDM116") '
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() geschossefromJson geschosssorte= 1 ladung= 0 zuender= 2 anzahl= 7
QSYSTEM: TestExStellungsmeldungFS::testExStellungsmeldungFS() wirkungsbereichFromJson
PASS : TestExStellungsmeldungFS::testExStellungsmeldungFS()
PASS : TestExStellungsmeldungFS::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 7ms
********* Finished testing of TestExStellungsmeldungFS *********
********* Start testing of TestExStellungsmeldungWS *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 7.5.0), opensuse-leap 15.4
PASS : TestExStellungsmeldungWS::initTestCase()
QDEBUG : TestExStellungsmeldungWS::testExStellungsmeldungWS() ------------------------------------------------
QDEBUG : TestExStellungsmeldungWS::testExStellungsmeldungWS() --- EX-SQ(WS) Stellungsmeldung Waffensystem ---
QSYSTEM: TestExStellungsmeldungWS::testExStellungsmeldungWS() toJsonInternal
QSYSTEM: TestExStellungsmeldungWS::testExStellungsmeldungWS() zeitangabe_DTGToJson Stunden= 13
QSYSTEM: TestExStellungsmeldungWS::testExStellungsmeldungWS() TODO waffensystemdatenToJson
QSYSTEM: TestExStellungsmeldungWS::testExStellungsmeldungWS() einheitToJson einheit.oi= 6
QSYSTEM: TestExStellungsmeldungWS::testExStellungsmeldungWS() geschossToJson geschosssorte= 17 ladung= 2 zuender= 10 anzahl= 6
QSYSTEM: TestExStellungsmeldungWS::testExStellungsmeldungWS() geschossToJson geschosssorte= 1 ladung= 0 zuender= 2 anzahl= 7
QSYSTEM: TestExStellungsmeldungWS::testExStellungsmeldungWS() koordinateToJson longitude= 8.759 latitude= 53.3779
QDEBUG : TestExStellungsmeldungWS::testExStellungsmeldungWS() koordinateMitHoeheToJson hoehe= 20
QDEBUG : TestExStellungsmeldungWS::testExStellungsmeldungWS() EX-SQ(WS) Stellungsmeldung Waffensystem= "{\n \"data\": {\n \"einheit\": {\n \"oi\": \"F6\",\n \"r\": 6,\n \"verein\": \"verein ExFeuerstellungWS\"\n },\n \"geschosse\": [\n {\n \"anzahl\": 6,\n \"geschosssorte\": \"MineDM72\",\n \"ladung\": \"X_DM82\",\n \"zuender\": \"Doppel_DM183\"\n },\n {\n \"anzahl\": 7,\n \"geschosssorte\": \"LeuchtDM116\",\n \"ladung\": \"B_L8A1\",\n \"zuender\": \"Aufschlag_BB_DM371\"\n }\n ],\n \"kenner\": \"B1\",\n \"koordinate\": {\n \"hoehe\": 20,\n \"koordinate\": {\n \"latitude\": 53.37791,\n \"longitude\": 8.759\n }\n },\n \"status\": \"Nicht einsatzbereit\",\n \"typ\": \"MRS\",\n \"wirkungsbereich\": {\n \"grundrichtung\": 1,\n \"links\": 2,\n \"rechts\": 3\n }\n },\n \"reciver\": \"EXCON@GUEZ.LIVE\",\n \"referenceUuid\": \"\",\n \"sender\": \"SAA1@GUEZ.LIVE\",\n \"timestamp\": {\n \"jahr\": 2025,\n \"minuten\": 11,\n \"monat\": 5,\n \"sekunden\": 10,\n \"stunden\": 13,\n \"tag\": 16,\n \"zdm\": \"ZDM\",\n \"zds\": \"ZDS\",\n \"zvz\": \"ZVz\"\n },\n \"type\": \"EX-SQ(WS)\",\n \"typeId\": 2001,\n \"uuid\": \"{546479bc-d439-46af-bbb8-8ab4bfb1f2cb}\",\n \"version\": \"\"\n}\n"
QSYSTEM: TestExStellungsmeldungWS::testExStellungsmeldungWS() waffensystemdatenFromJson
QSYSTEM: TestExStellungsmeldungWS::testExStellungsmeldungWS() einheitfromJson
QSYSTEM: TestExStellungsmeldungWS::testExStellungsmeldungWS() geschossefromJson
QSYSTEM: TestExStellungsmeldungWS::testExStellungsmeldungWS() geschosssorte= ' QJsonValue(string, "MineDM72") '
QSYSTEM: TestExStellungsmeldungWS::testExStellungsmeldungWS() geschossefromJson geschosssorte= 17 ladung= 2 zuender= 10 anzahl= 6
QSYSTEM: TestExStellungsmeldungWS::testExStellungsmeldungWS() geschossefromJson
QSYSTEM: TestExStellungsmeldungWS::testExStellungsmeldungWS() geschosssorte= ' QJsonValue(string, "LeuchtDM116") '
QSYSTEM: TestExStellungsmeldungWS::testExStellungsmeldungWS() geschossefromJson geschosssorte= 1 ladung= 0 zuender= 2 anzahl= 7
QSYSTEM: TestExStellungsmeldungWS::testExStellungsmeldungWS() koordinateMitHoeheFromJson
QSYSTEM: TestExStellungsmeldungWS::testExStellungsmeldungWS() koordinatefromJson
QSYSTEM: TestExStellungsmeldungWS::testExStellungsmeldungWS() koordinatefromJson longitude= 8.759 latitude= 53.3779
QSYSTEM: TestExStellungsmeldungWS::testExStellungsmeldungWS() koordinateMitHoeheFromJson hoehe= 20
QSYSTEM: TestExStellungsmeldungWS::testExStellungsmeldungWS() wirkungsbereichFromJson
PASS : TestExStellungsmeldungWS::testExStellungsmeldungWS()
PASS : TestExStellungsmeldungWS::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 4ms
********* Finished testing of TestExStellungsmeldungWS *********
********* Start testing of TestExStellungsmeldungLP *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 7.5.0), opensuse-leap 15.4
PASS : TestExStellungsmeldungLP::initTestCase()
QDEBUG : TestExStellungsmeldungLP::testExStellungsmeldungLP() --------------------------------------------
QDEBUG : TestExStellungsmeldungLP::testExStellungsmeldungLP() --- EX-SQ(LP) Stellungsmeldung Ladeplatz ---
QSYSTEM: TestExStellungsmeldungLP::testExStellungsmeldungLP() toJsonInternal
QSYSTEM: TestExStellungsmeldungLP::testExStellungsmeldungLP() zeitangabe_DTGToJson Stunden= 13
QSYSTEM: TestExStellungsmeldungLP::testExStellungsmeldungLP() TODO ladeplatzdatenToJson
QSYSTEM: TestExStellungsmeldungLP::testExStellungsmeldungLP() geschossToJson geschosssorte= 17 ladung= 2 zuender= 10 anzahl= 6
QSYSTEM: TestExStellungsmeldungLP::testExStellungsmeldungLP() geschossToJson geschosssorte= 1 ladung= 0 zuender= 2 anzahl= 7
QSYSTEM: TestExStellungsmeldungLP::testExStellungsmeldungLP() koordinateToJson longitude= 8.759 latitude= 53.3779
QDEBUG : TestExStellungsmeldungLP::testExStellungsmeldungLP() koordinateMitHoeheToJson hoehe= 20
QDEBUG : TestExStellungsmeldungLP::testExStellungsmeldungLP() EX-SQ(LP) Stellungsmeldung Ladeplatz= "{\n \"data\": {\n \"geschosse\": [\n {\n \"anzahl\": 6,\n \"geschosssorte\": \"MineDM72\",\n \"ladung\": \"X_DM82\",\n \"zuender\": \"Doppel_DM183\"\n },\n {\n \"anzahl\": 7,\n \"geschosssorte\": \"LeuchtDM116\",\n \"ladung\": \"B_L8A1\",\n \"zuender\": \"Aufschlag_BB_DM371\"\n }\n ],\n \"koordinate\": {\n \"hoehe\": 20,\n \"koordinate\": {\n \"latitude\": 53.37791,\n \"longitude\": 8.759\n }\n },\n \"typ\": \"EX_L20_ASSY\"\n },\n \"reciver\": \"EXCON@GUEZ.LIVE\",\n \"referenceUuid\": \"\",\n \"sender\": \"SAA1@GUEZ.LIVE\",\n \"timestamp\": {\n \"jahr\": 2025,\n \"minuten\": 11,\n \"monat\": 5,\n \"sekunden\": 10,\n \"stunden\": 13,\n \"tag\": 16,\n \"zdm\": \"ZDM\",\n \"zds\": \"ZDS\",\n \"zvz\": \"ZVz\"\n },\n \"type\": \"EX-SQ(LP)\",\n \"typeId\": 2002,\n \"uuid\": \"{eb9ec2e2-5a63-4c90-a17d-b6273bbcd00c}\",\n \"version\": \"\"\n}\n"
QSYSTEM: TestExStellungsmeldungLP::testExStellungsmeldungLP() ladeplatzdatenFromJson
QSYSTEM: TestExStellungsmeldungLP::testExStellungsmeldungLP() koordinateMitHoeheFromJson
QSYSTEM: TestExStellungsmeldungLP::testExStellungsmeldungLP() koordinatefromJson
QSYSTEM: TestExStellungsmeldungLP::testExStellungsmeldungLP() koordinatefromJson longitude= 8.759 latitude= 53.3779
QSYSTEM: TestExStellungsmeldungLP::testExStellungsmeldungLP() koordinateMitHoeheFromJson hoehe= 20
QSYSTEM: TestExStellungsmeldungLP::testExStellungsmeldungLP() geschossefromJson
QSYSTEM: TestExStellungsmeldungLP::testExStellungsmeldungLP() geschosssorte= ' QJsonValue(string, "MineDM72") '
QSYSTEM: TestExStellungsmeldungLP::testExStellungsmeldungLP() geschossefromJson geschosssorte= 17 ladung= 2 zuender= 10 anzahl= 6
QSYSTEM: TestExStellungsmeldungLP::testExStellungsmeldungLP() geschossefromJson
QSYSTEM: TestExStellungsmeldungLP::testExStellungsmeldungLP() geschosssorte= ' QJsonValue(string, "LeuchtDM116") '
QSYSTEM: TestExStellungsmeldungLP::testExStellungsmeldungLP() geschossefromJson geschosssorte= 1 ladung= 0 zuender= 2 anzahl= 7
PASS : TestExStellungsmeldungLP::testExStellungsmeldungLP()
PASS : TestExStellungsmeldungLP::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 4ms
********* Finished testing of TestExStellungsmeldungLP *********
********* Start testing of TestExErkundungsergebnisse *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 7.5.0), opensuse-leap 15.4
PASS : TestExErkundungsergebnisse::initTestCase()
QDEBUG : TestExErkundungsergebnisse::testExErkundungsergebnisse() -------------------------------------------------------------
QDEBUG : TestExErkundungsergebnisse::testExErkundungsergebnisse() --- EX-Erkundungsergebnisse - Senden Erkundungsergebnisse ---
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() toJsonInternal
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() zeitangabe_DTGToJson Stunden= 13
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() erkundungsdatenToJson
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() erkundungseinheitToJson verein= "verein Erkundungsdaten" r= 5
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() koordinateToJson longitude= 8.758 latitude= 53.3779
QDEBUG : TestExErkundungsergebnisse::testExErkundungsergebnisse() koordinateMitHoeheToJson hoehe= 55
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() erkundungsstellungenToJson
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() koordinateToJson longitude= 8.759 latitude= 53.3779
QDEBUG : TestExErkundungsergebnisse::testExErkundungsergebnisse() koordinateMitHoeheToJson hoehe= 56
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() koordinateToJson longitude= 8.76 latitude= 53.3779
QDEBUG : TestExErkundungsergebnisse::testExErkundungsergebnisse() koordinateMitHoeheToJson hoehe= 57
QDEBUG : TestExErkundungsergebnisse::testExErkundungsergebnisse() erkundungsergebnisseMessage= "{\n \"data\": {\n \"feuerkommando\": {\n \"einheit\": 5,\n \"verein\": \"verein Erkundungsdaten\"\n },\n \"koordinate\": {\n \"hoehe\": 55,\n \"koordinate\": {\n \"latitude\": 53.3779,\n \"longitude\": 8.758\n }\n },\n \"stellungen\": {\n \"waffenplaetze\": [\n {\n \"hoehe\": 56,\n \"koordinate\": {\n \"latitude\": 53.37791,\n \"longitude\": 8.759\n }\n },\n {\n \"hoehe\": 57,\n \"koordinate\": {\n \"latitude\": 53.37792,\n \"longitude\": 8.76\n }\n }\n ],\n \"wirkungsbereich\": {\n \"grundrichtung\": 33,\n \"links\": 44,\n \"rechts\": 55\n }\n }\n },\n \"reciver\": \"EXCON@GUEZ.LIVE\",\n \"referenceUuid\": \"\",\n \"sender\": \"SAA1@GUEZ.LIVE\",\n \"timestamp\": {\n \"jahr\": 2025,\n \"minuten\": 11,\n \"monat\": 5,\n \"sekunden\": 10,\n \"stunden\": 13,\n \"tag\": 16,\n \"zdm\": \"ZDM\",\n \"zds\": \"ZDS\",\n \"zvz\": \"ZVz\"\n },\n \"type\": \"EX-Erkundungsergebnisse\",\n \"typeId\": 5000,\n \"uuid\": \"{591a0103-e504-4a42-9c87-a755c6600018}\",\n \"version\": \"\"\n}\n"
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() START erkundungsdatenFromJson
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() erkundungseinheitFromJson verein= "verein Erkundungsdaten" r= 5
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() koordinateMitHoeheFromJson
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() koordinatefromJson
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() koordinatefromJson longitude= 8.758 latitude= 53.3779
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() koordinateMitHoeheFromJson hoehe= 55
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() erkundungsstellungenFromJson
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() waffenplaetzeArray.size() 2
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() koordinateMitHoeheFromJson
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() koordinatefromJson
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() koordinatefromJson longitude= 8.759 latitude= 53.3779
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() koordinateMitHoeheFromJson hoehe= 56
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() koordinateMitHoeheFromJson
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() koordinatefromJson
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() koordinatefromJson longitude= 8.76 latitude= 53.3779
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() koordinateMitHoeheFromJson hoehe= 57
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() wirkungsbereichFromJson
QSYSTEM: TestExErkundungsergebnisse::testExErkundungsergebnisse() Ende erkundungsstellungenFromJson
PASS : TestExErkundungsergebnisse::testExErkundungsergebnisse()
PASS : TestExErkundungsergebnisse::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 5ms
********* Finished testing of TestExErkundungsergebnisse *********
********* Start testing of TestExStellungswechsel *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 7.5.0), opensuse-leap 15.4
PASS : TestExStellungswechsel::initTestCase()
QDEBUG : TestExStellungswechsel::testExStellungswechsel() ---------------------------
QDEBUG : TestExStellungswechsel::testExStellungswechsel() --- EX-Stellungswechsel ---
QSYSTEM: TestExStellungswechsel::testExStellungswechsel() toJsonInternal
QSYSTEM: TestExStellungswechsel::testExStellungswechsel() zeitangabe_DTGToJson Stunden= 13
QDEBUG : TestExStellungswechsel::testExStellungswechsel() EX-Stellungswechsel= "{\n \"data\": {\n \"oi\": \"F3\",\n \"r\": 5,\n \"verein\": \"verein ExStellungswechsel\"\n },\n \"reciver\": \"EXCON@GUEZ.LIVE\",\n \"referenceUuid\": \"\",\n \"sender\": \"SAA1@GUEZ.LIVE\",\n \"timestamp\": {\n \"jahr\": 2025,\n \"minuten\": 11,\n \"monat\": 5,\n \"sekunden\": 10,\n \"stunden\": 13,\n \"tag\": 16,\n \"zdm\": \"ZDM\",\n \"zds\": \"ZDS\",\n \"zvz\": \"ZVz\"\n },\n \"type\": \"EX-Stellungswechsel\",\n \"typeId\": 20,\n \"uuid\": \"{31f1ed16-59fc-49bd-ab26-9a7b47f3343c}\",\n \"version\": \"\"\n}\n"
QSYSTEM: TestExStellungswechsel::testExStellungswechsel() stellungswechseldatenFromJson
PASS : TestExStellungswechsel::testExStellungswechsel()
PASS : TestExStellungswechsel::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 3ms
********* Finished testing of TestExStellungswechsel *********
********* Start testing of TestExHqKoordinierungsmassnahmen *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 7.5.0), opensuse-leap 15.4
PASS : TestExHqKoordinierungsmassnahmen::initTestCase()
QDEBUG : TestExHqKoordinierungsmassnahmen::testExHqKoordinierungsmassnahmen() -----------------------------------------
QDEBUG : TestExHqKoordinierungsmassnahmen::testExHqKoordinierungsmassnahmen() --- EX-HQ(K) Koordinierungsmassnahmen ---
QSYSTEM: TestExHqKoordinierungsmassnahmen::testExHqKoordinierungsmassnahmen() toJsonInternal
QSYSTEM: TestExHqKoordinierungsmassnahmen::testExHqKoordinierungsmassnahmen() zeitangabe_DTGToJson Stunden= 13
QSYSTEM: TestExHqKoordinierungsmassnahmen::testExHqKoordinierungsmassnahmen() koordinierungsdatenToJson
QSYSTEM: TestExHqKoordinierungsmassnahmen::testExHqKoordinierungsmassnahmen() zeitangabe_DTGToJson Stunden= 5
QSYSTEM: TestExHqKoordinierungsmassnahmen::testExHqKoordinierungsmassnahmen() zeitangabe_DTGToJson Stunden= 5
QSYSTEM: TestExHqKoordinierungsmassnahmen::testExHqKoordinierungsmassnahmen() koordinateToJson longitude= 8.76 latitude= 53.3779
QSYSTEM: TestExHqKoordinierungsmassnahmen::testExHqKoordinierungsmassnahmen() koordinateToJson longitude= 8.761 latitude= 53.3779
QSYSTEM: TestExHqKoordinierungsmassnahmen::testExHqKoordinierungsmassnahmen() koordinateToJson longitude= 8.762 latitude= 53.3779
QDEBUG : TestExHqKoordinierungsmassnahmen::testExHqKoordinierungsmassnahmen() EX-HQ(K) Koordinierungsmassnahmen= "{\n \"data\": {\n \"ab\": {\n \"jahr\": 2025,\n \"minuten\": 35,\n \"monat\": 11,\n \"sekunden\": 55,\n \"stunden\": 5,\n \"tag\": 12,\n \"zdm\": \"ZDM\",\n \"zds\": \"ZDS\",\n \"zvz\": \"ZVz\"\n },\n \"art\": \"NFA\",\n \"bis\": {\n \"jahr\": 2025,\n \"minuten\": 35,\n \"monat\": 11,\n \"sekunden\": 55,\n \"stunden\": 5,\n \"tag\": 13,\n \"zdm\": \"ZDM\",\n \"zds\": \"ZDS\",\n \"zvz\": \"ZVz\"\n },\n \"koordinaten\": [\n {\n \"latitude\": 53.37792,\n \"longitude\": 8.76\n },\n {\n \"latitude\": 53.37793,\n \"longitude\": 8.761\n }\n ],\n \"maxGipfel\": 123,\n \"mittelpunkt\": {\n \"latitude\": 53.37794,\n \"longitude\": 8.762\n },\n \"name\": \"Name ExHqKoordinierungsmassnahme\",\n \"radius\": 66,\n \"truppenteil\": \"Truppenteil ExHqKoordinierungsmassnahme\"\n },\n \"reciver\": \"EXCON@GUEZ.LIVE\",\n \"referenceUuid\": \"\",\n \"sender\": \"SAA1@GUEZ.LIVE\",\n \"timestamp\": {\n \"jahr\": 2025,\n \"minuten\": 11,\n \"monat\": 5,\n \"sekunden\": 10,\n \"stunden\": 13,\n \"tag\": 16,\n \"zdm\": \"ZDM\",\n \"zds\": \"ZDS\",\n \"zvz\": \"ZVz\"\n },\n \"type\": \"EX-HQ(K)\",\n \"typeId\": 20,\n \"uuid\": \"{321f5053-6c92-497d-b044-835a2242e750}\",\n \"version\": \"\"\n}\n"
QSYSTEM: TestExHqKoordinierungsmassnahmen::testExHqKoordinierungsmassnahmen() koordinierungsdatenFromJson
QSYSTEM: TestExHqKoordinierungsmassnahmen::testExHqKoordinierungsmassnahmen() zeitangabe_DTGFromJson Stunden= -1065143760
QSYSTEM: TestExHqKoordinierungsmassnahmen::testExHqKoordinierungsmassnahmen() zeitangabe_DTGFromJson Stunden= -1065142288
QSYSTEM: TestExHqKoordinierungsmassnahmen::testExHqKoordinierungsmassnahmen() koordinatefromJson
QSYSTEM: TestExHqKoordinierungsmassnahmen::testExHqKoordinierungsmassnahmen() koordinatefromJson longitude= 8.76 latitude= 53.3779
QSYSTEM: TestExHqKoordinierungsmassnahmen::testExHqKoordinierungsmassnahmen() koordinatefromJson
QSYSTEM: TestExHqKoordinierungsmassnahmen::testExHqKoordinierungsmassnahmen() koordinatefromJson longitude= 8.761 latitude= 53.3779
QSYSTEM: TestExHqKoordinierungsmassnahmen::testExHqKoordinierungsmassnahmen() koordinatefromJson
QSYSTEM: TestExHqKoordinierungsmassnahmen::testExHqKoordinierungsmassnahmen() koordinatefromJson longitude= 8.762 latitude= 53.3779
PASS : TestExHqKoordinierungsmassnahmen::testExHqKoordinierungsmassnahmen()
PASS : TestExHqKoordinierungsmassnahmen::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 4ms
********* Finished testing of TestExHqKoordinierungsmassnahmen *********
********* Start testing of TestExHqFuehrungslinien *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 7.5.0), opensuse-leap 15.4
PASS : TestExHqFuehrungslinien::initTestCase()
QDEBUG : TestExHqFuehrungslinien::testExHqFuehrungslinien() -------------------------------------------
QDEBUG : TestExHqFuehrungslinien::testExHqFuehrungslinien() --- EX-HQ(G) Fuehrungslinien und Grenzen ---
QSYSTEM: TestExHqFuehrungslinien::testExHqFuehrungslinien() toJsonInternal
QSYSTEM: TestExHqFuehrungslinien::testExHqFuehrungslinien() zeitangabe_DTGToJson Stunden= 13
QSYSTEM: TestExHqFuehrungslinien::testExHqFuehrungslinien() fuehrungsdatenToJson
QSYSTEM: TestExHqFuehrungslinien::testExHqFuehrungslinien() zeitangabe_DTGToJson Stunden= 5
QSYSTEM: TestExHqFuehrungslinien::testExHqFuehrungslinien() zeitangabe_DTGToJson Stunden= 5
QSYSTEM: TestExHqFuehrungslinien::testExHqFuehrungslinien() koordinateToJson longitude= 8.76 latitude= 53.3779
QSYSTEM: TestExHqFuehrungslinien::testExHqFuehrungslinien() fuehrungsdatenToJson koordinate= 8.76 / 53.3779
QSYSTEM: TestExHqFuehrungslinien::testExHqFuehrungslinien() koordinateToJson longitude= 8.761 latitude= 53.3779
QSYSTEM: TestExHqFuehrungslinien::testExHqFuehrungslinien() fuehrungsdatenToJson koordinate= 8.761 / 53.3779
QDEBUG : TestExHqFuehrungslinien::testExHqFuehrungslinien() EX-HQ(G) Fuehrungslinien und Grenzen= "{\n \"data\": {\n \"ab\": {\n \"jahr\": 2025,\n \"minuten\": 35,\n \"monat\": 11,\n \"sekunden\": 55,\n \"stunden\": 5,\n \"tag\": 12,\n \"zdm\": \"ZDM\",\n \"zds\": \"ZDS\",\n \"zvz\": \"ZVz\"\n },\n \"art\": \"AO\",\n \"bis\": {\n \"jahr\": 2025,\n \"minuten\": 35,\n \"monat\": 11,\n \"sekunden\": 55,\n \"stunden\": 5,\n \"tag\": 13,\n \"zdm\": \"ZDM\",\n \"zds\": \"ZDS\",\n \"zvz\": \"ZVz\"\n },\n \"koordinaten\": [\n {\n \"latitude\": 53.37792,\n \"longitude\": 8.76\n },\n {\n \"latitude\": 53.37793,\n \"longitude\": 8.761\n }\n ],\n \"linkerNachbar\": \"linker Nachbar\",\n \"name\": \"Name EX-HQ(G) Führungslinien und Grenzen\",\n \"rechterNachbar\": \"rechter Nachbar\"\n },\n \"reciver\": \"EXCON@GUEZ.LIVE\",\n \"referenceUuid\": \"\",\n \"sender\": \"SAA1@GUEZ.LIVE\",\n \"timestamp\": {\n \"jahr\": 2025,\n \"minuten\": 11,\n \"monat\": 5,\n \"sekunden\": 10,\n \"stunden\": 13,\n \"tag\": 16,\n \"zdm\": \"ZDM\",\n \"zds\": \"ZDS\",\n \"zvz\": \"ZVz\"\n },\n \"type\": \"EX-HQ(G)\",\n \"typeId\": 3001,\n \"uuid\": \"{15661f37-df99-4ce1-be00-cef043a8a01b}\",\n \"version\": \"\"\n}\n"
QSYSTEM: TestExHqFuehrungslinien::testExHqFuehrungslinien() fuehrungsdatenfromJson
QSYSTEM: TestExHqFuehrungslinien::testExHqFuehrungslinien() zeitangabe_DTGFromJson Stunden= 2
QSYSTEM: TestExHqFuehrungslinien::testExHqFuehrungslinien() zeitangabe_DTGFromJson Stunden= -1065142288
QSYSTEM: TestExHqFuehrungslinien::testExHqFuehrungslinien() koordinatefromJson
QSYSTEM: TestExHqFuehrungslinien::testExHqFuehrungslinien() koordinatefromJson longitude= 8.76 latitude= 53.3779
QSYSTEM: TestExHqFuehrungslinien::testExHqFuehrungslinien() fuehrungsdatenfromJson koordinate= 8.76 / 53.3779
QSYSTEM: TestExHqFuehrungslinien::testExHqFuehrungslinien() koordinatefromJson
QSYSTEM: TestExHqFuehrungslinien::testExHqFuehrungslinien() koordinatefromJson longitude= 8.761 latitude= 53.3779
QSYSTEM: TestExHqFuehrungslinien::testExHqFuehrungslinien() fuehrungsdatenfromJson koordinate= 8.761 / 53.3779
PASS : TestExHqFuehrungslinien::testExHqFuehrungslinien()
PASS : TestExHqFuehrungslinien::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 4ms
********* Finished testing of TestExHqFuehrungslinien *********
********* Start testing of TestExTqTechnischeQuittung *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 7.5.0), opensuse-leap 15.4
PASS : TestExTqTechnischeQuittung::initTestCase()
QDEBUG : TestExTqTechnischeQuittung::testExTqTechnischeQuittung() ------------------------------------
QDEBUG : TestExTqTechnischeQuittung::testExTqTechnischeQuittung() --- EX-TQ Technische Quittierung ---
QSYSTEM: TestExTqTechnischeQuittung::testExTqTechnischeQuittung() toJsonInternal
QSYSTEM: TestExTqTechnischeQuittung::testExTqTechnischeQuittung() zeitangabe_DTGToJson Stunden= 13
QSYSTEM: TestExTqTechnischeQuittung::testExTqTechnischeQuittung() technischeDatenToJson
QDEBUG : TestExTqTechnischeQuittung::testExTqTechnischeQuittung() EX-TQ Technische Quittierung= "{\n \"data\": {\n \"beschreibung\": \"Beschreibung technischer Status\",\n \"status\": \"INV\"\n },\n \"reciver\": \"EXCON@GUEZ.LIVE\",\n \"referenceUuid\": \"\",\n \"sender\": \"SAA1@GUEZ.LIVE\",\n \"timestamp\": {\n \"jahr\": 2025,\n \"minuten\": 11,\n \"monat\": 5,\n \"sekunden\": 10,\n \"stunden\": 13,\n \"tag\": 16,\n \"zdm\": \"ZDM\",\n \"zds\": \"ZDS\",\n \"zvz\": \"ZVz\"\n },\n \"type\": \"EX-TQ\",\n \"typeId\": 6013,\n \"uuid\": \"{5b6c08ea-448a-47aa-bddb-a775c2cf9537}\",\n \"version\": \"\"\n}\n"
QSYSTEM: TestExTqTechnischeQuittung::testExTqTechnischeQuittung() technischeDatenFromJson
PASS : TestExTqTechnischeQuittung::testExTqTechnischeQuittung()
PASS : TestExTqTechnischeQuittung::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 3ms
********* Finished testing of TestExTqTechnischeQuittung *********
********* Start testing of TestExAqFreitextmeldung *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 7.5.0), opensuse-leap 15.4
PASS : TestExAqFreitextmeldung::initTestCase()
QDEBUG : TestExAqFreitextmeldung::testExAqFreitextmeldung() -----------------------------
QDEBUG : TestExAqFreitextmeldung::testExAqFreitextmeldung() --- EX-AQ Freitextmeldung ---
QSYSTEM: TestExAqFreitextmeldung::testExAqFreitextmeldung() toJsonInternal
QSYSTEM: TestExAqFreitextmeldung::testExAqFreitextmeldung() zeitangabe_DTGToJson Stunden= 13
QSYSTEM: TestExAqFreitextmeldung::testExAqFreitextmeldung() freitextdatenToJson
QDEBUG : TestExAqFreitextmeldung::testExAqFreitextmeldung() EX-AQ Freitextmeldung= "{\n \"data\": {\n \"text\": \"Freier Text\"\n },\n \"reciver\": \"EXCON@GUEZ.LIVE\",\n \"referenceUuid\": \"\",\n \"sender\": \"SAA1@GUEZ.LIVE\",\n \"timestamp\": {\n \"jahr\": 2025,\n \"minuten\": 11,\n \"monat\": 5,\n \"sekunden\": 10,\n \"stunden\": 13,\n \"tag\": 16,\n \"zdm\": \"ZDM\",\n \"zds\": \"ZDS\",\n \"zvz\": \"ZVz\"\n },\n \"type\": \"EX-AQ\",\n \"typeId\": 5001,\n \"uuid\": \"{2f05b52d-7a25-41fa-80da-8d95f81e3933}\",\n \"version\": \"\"\n}\n"
QSYSTEM: TestExAqFreitextmeldung::testExAqFreitextmeldung() freitextdatenToJson
PASS : TestExAqFreitextmeldung::testExAqFreitextmeldung()
PASS : TestExAqFreitextmeldung::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 2ms
********* Finished testing of TestExAqFreitextmeldung *********
********* Start testing of TestExFlugbahnberechnung *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 7.5.0), opensuse-leap 15.4
PASS : TestExFlugbahnberechnung::initTestCase()
QDEBUG : TestExFlugbahnberechnung::testExFlugbahnberechnung() -----------------------------
QDEBUG : TestExFlugbahnberechnung::testExFlugbahnberechnung() --- EX-Flugbahnberechnung ---
QSYSTEM: TestExFlugbahnberechnung::testExFlugbahnberechnung() toJsonInternal
QSYSTEM: TestExFlugbahnberechnung::testExFlugbahnberechnung() zeitangabe_DTGToJson Stunden= 13
QSYSTEM: TestExFlugbahnberechnung::testExFlugbahnberechnung() exFlugbahnberechnungDatenToJson
QSYSTEM: TestExFlugbahnberechnung::testExFlugbahnberechnung() koordinateToJson longitude= 8.7573 latitude= 53.3779
QDEBUG : TestExFlugbahnberechnung::testExFlugbahnberechnung() koordinateMitHoeheToJson hoehe= 55
QSYSTEM: TestExFlugbahnberechnung::testExFlugbahnberechnung() koordinateToJson longitude= 8.7574 latitude= 53.3779
QDEBUG : TestExFlugbahnberechnung::testExFlugbahnberechnung() koordinateMitHoeheToJson hoehe= 56
QSYSTEM: TestExFlugbahnberechnung::testExFlugbahnberechnung() FlugbahnberechnungGeschosseToJson
QDEBUG : TestExFlugbahnberechnung::testExFlugbahnberechnung() EX-Flugbahnberechnung= "{\n \"data\": {\n \"geschoss\": {\n \"geschosssorte\": \"SprengDM121\",\n \"ladung\": \"M_DM72\",\n \"zuender\": \"Aufschlag_DM241\",\n \"zuenderFunktion\": \"AZoV\"\n },\n \"sprenghoehe\": 33,\n \"standort\": {\n \"hoehe\": 55,\n \"koordinate\": {\n \"latitude\": 53.37787,\n \"longitude\": 8.7573\n }\n },\n \"waffensystem\": \"MRS\",\n \"winkelgruppe\": \"Obere\",\n \"zielkoordinate\": {\n \"hoehe\": 56,\n \"koordinate\": {\n \"latitude\": 53.37788,\n \"longitude\": 8.7574\n }\n }\n },\n \"reciver\": \"EXCON@GUEZ.LIVE\",\n \"referenceUuid\": \"\",\n \"sender\": \"SAA1@GUEZ.LIVE\",\n \"timestamp\": {\n \"jahr\": 2025,\n \"minuten\": 11,\n \"monat\": 5,\n \"sekunden\": 10,\n \"stunden\": 13,\n \"tag\": 16,\n \"zdm\": \"ZDM\",\n \"zds\": \"ZDS\",\n \"zvz\": \"ZVz\"\n },\n \"type\": \"EX-Flugbahnberechnung\",\n \"typeId\": 4000,\n \"uuid\": \"{f3a7a892-4431-4136-b7de-f8ab46e9b915}\",\n \"version\": \"\"\n}\n"
QSYSTEM: TestExFlugbahnberechnung::testExFlugbahnberechnung() exFlugbahnberechnungDatenFromJson
QSYSTEM: TestExFlugbahnberechnung::testExFlugbahnberechnung() koordinateMitHoeheFromJson
QSYSTEM: TestExFlugbahnberechnung::testExFlugbahnberechnung() koordinatefromJson
QSYSTEM: TestExFlugbahnberechnung::testExFlugbahnberechnung() koordinatefromJson longitude= 8.7573 latitude= 53.3779
QSYSTEM: TestExFlugbahnberechnung::testExFlugbahnberechnung() koordinateMitHoeheFromJson hoehe= 55
QSYSTEM: TestExFlugbahnberechnung::testExFlugbahnberechnung() koordinateMitHoeheFromJson
QSYSTEM: TestExFlugbahnberechnung::testExFlugbahnberechnung() koordinatefromJson
QSYSTEM: TestExFlugbahnberechnung::testExFlugbahnberechnung() koordinatefromJson longitude= 8.7574 latitude= 53.3779
QSYSTEM: TestExFlugbahnberechnung::testExFlugbahnberechnung() koordinateMitHoeheFromJson hoehe= 56
QSYSTEM: TestExFlugbahnberechnung::testExFlugbahnberechnung() flugbahnberechnungGeschosseFromJson
QSYSTEM: TestExFlugbahnberechnung::testExFlugbahnberechnung() geschosssorte= "" int: -1065142592
FAIL! : TestExFlugbahnberechnung::testExFlugbahnberechnung() Compared values are not the same
Actual (flugbahnberechnungDaten.geschoss.ladungsNummer): 2
Expected (5) : 5
Loc: [/mnt/24_adler/Lts/Proxies/TrainingAreaBase/Plugins/AdlerJson/ModuleTest/msgcompares.cpp(264)]
PASS : TestExFlugbahnberechnung::cleanupTestCase()
Totals: 2 passed, 1 failed, 0 skipped, 0 blacklisted, 3ms
********* Finished testing of TestExFlugbahnberechnung *********
********* Start testing of TestExFlugbahndaten *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 7.5.0), opensuse-leap 15.4
PASS : TestExFlugbahndaten::initTestCase()
QDEBUG : TestExFlugbahndaten::testExFlugbahndaten() -----------------------------
QDEBUG : TestExFlugbahndaten::testExFlugbahndaten() --- EX-Flugbahndaten ---
QDEBUG : TestExFlugbahndaten::testExFlugbahndaten() -------------------------------
QDEBUG : TestExFlugbahndaten::testExFlugbahndaten() --- ExFlugbahndaten::toJson ---
QSYSTEM: TestExFlugbahndaten::testExFlugbahndaten() toJsonInternal
QSYSTEM: TestExFlugbahndaten::testExFlugbahndaten() zeitangabe_DTGToJson Stunden= 13
QSYSTEM: TestExFlugbahndaten::testExFlugbahndaten() TODO flugbahndatenToJson
QSYSTEM: TestExFlugbahndaten::testExFlugbahndaten() koordinateToJson longitude= 8.7574 latitude= 53.3779
QDEBUG : TestExFlugbahndaten::testExFlugbahndaten() koordinateMitHoeheToJson hoehe= 56
QSYSTEM: TestExFlugbahndaten::testExFlugbahndaten() FlugbahndatenGeschosseToJson
QDEBUG : TestExFlugbahndaten::testExFlugbahndaten() EX-Flugbahndaten= "{\n \"data\": {\n \"fallwinkel\": 55,\n \"fehlercode\": \"MaximaleEntfernung\",\n \"flugbahnpunkt\": [\n {\n \"xRelativ\": 2.2,\n \"yRelativ\": 3.3,\n \"zRelativ\": 4.4,\n \"zeit\": 1.1\n },\n {\n \"xRelativ\": 2.3,\n \"yRelativ\": 3.4,\n \"zRelativ\": 4.5,\n \"zeit\": 1.2\n }\n ],\n \"flugzeit\": 300,\n \"geschoss\": {\n \"geschosssorte\": \"SprengDM121\",\n \"ladung\": \"M_DM72\",\n \"ladungsNummer\": 5,\n \"zuender\": \"Aufschlag_DM241\",\n \"zuenderFunktion\": \"AZoV\",\n \"zuenderZeit\": 1000\n },\n \"gipfelhoehe\": 200,\n \"schussrichtung\": 45,\n \"streuung\": {\n \"peBurstDeflection\": 5.5,\n \"peBurstRange\": 4.4,\n \"peDeflection\": 3.3,\n \"peRange\": 2.2\n },\n \"typ\": \"MRS\",\n \"zielkoordinate\": {\n \"hoehe\": 56,\n \"koordinate\": {\n \"latitude\": 53.37788,\n \"longitude\": 8.7574\n }\n }\n },\n \"reciver\": \"EXCON@GUEZ.LIVE\",\n \"referenceUuid\": \"\",\n \"sender\": \"SAA1@GUEZ.LIVE\",\n \"timestamp\": {\n \"jahr\": 2025,\n \"minuten\": 11,\n \"monat\": 5,\n \"sekunden\": 10,\n \"stunden\": 13,\n \"tag\": 16,\n \"zdm\": \"ZDM\",\n \"zds\": \"ZDS\",\n \"zvz\": \"ZVz\"\n },\n \"type\": \"EX-Flugbahndaten\",\n \"typeId\": 4001,\n \"uuid\": \"{1ee580e9-d659-4861-ab01-edc529f27950}\",\n \"version\": \"\"\n}\n"
QSYSTEM: TestExFlugbahndaten::testExFlugbahndaten() flugbahndatenDatenFromJson
QSYSTEM: TestExFlugbahndaten::testExFlugbahndaten() koordinateMitHoeheFromJson
QSYSTEM: TestExFlugbahndaten::testExFlugbahndaten() koordinatefromJson
QSYSTEM: TestExFlugbahndaten::testExFlugbahndaten() koordinatefromJson longitude= 8.7574 latitude= 53.3779
QSYSTEM: TestExFlugbahndaten::testExFlugbahndaten() koordinateMitHoeheFromJson hoehe= 56
QSYSTEM: TestExFlugbahndaten::testExFlugbahndaten() flugbahnpunktFromJson
QSYSTEM: TestExFlugbahndaten::testExFlugbahndaten() flugbahnpunktFromJson zeit= 1.1 punkt= 2.2 / 3.3 / 4.4
QSYSTEM: TestExFlugbahndaten::testExFlugbahndaten() fuehrungsdatenfromJson flugbahnpunkt= 1.1 / 2.2 / 3.3 / 4.4
QSYSTEM: TestExFlugbahndaten::testExFlugbahndaten() flugbahnpunktFromJson
QSYSTEM: TestExFlugbahndaten::testExFlugbahndaten() flugbahnpunktFromJson zeit= 1.2 punkt= 2.3 / 3.4 / 4.5
QSYSTEM: TestExFlugbahndaten::testExFlugbahndaten() fuehrungsdatenfromJson flugbahnpunkt= 1.2 / 2.3 / 3.4 / 4.5
QSYSTEM: TestExFlugbahndaten::testExFlugbahndaten() streuungsdatenfromJson peDeflection= 3.3 peBurstRange= 4.4 peBurstDeflection= 5.5
QSYSTEM: TestExFlugbahndaten::testExFlugbahndaten() FlugbahndatenGeschosseFromJson
PASS : TestExFlugbahndaten::testExFlugbahndaten()
PASS : TestExFlugbahndaten::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 4ms
********* Finished testing of TestExFlugbahndaten *********
@@ -0,0 +1,85 @@
#
# @RDE_HEADER@
# $Id: CMakeLists.txt 64525 2025-02-14 12:35:41Z fritsche_h $
# $HeadURL: svn://slssvn/TDS/branches/product/features/24_adler/Lts/Services/AreaEffectSimulation/ModuleTest_ExplosionCluster/CMakeLists.txt $
# $Author: fritsche_h $
#
# Make ${Qt6_WebSockets} optional
if(QT6_GUI_AVAILABLE AND TARGET Qt6::WebSockets)
set(Qt6_WebSockets ${Qt6_WebSockets})
else()
set(Qt6_WebSockets "")
endif()
SET(UnitTestSources
test_telegram_decoding.cpp
ex_anmeldung.cpp
ex_anmeldung.h
ex_abmeldung.cpp
ex_abmeldung.h
ex_anmeldebestaetigung.cpp
ex_anmeldebestaetigung.h
ex_status.cpp
ex_status.h
ex_fq_wirkfeldplanung.cpp
ex_fq_wirkfeldplanung.h
ex_fq_feuerbereit.cpp
ex_fq_feuerbereit.h
ex_fq_feuern.cpp
ex_fq_feuern.h
ex_fq_abgefeuert.cpp
ex_fq_abgefeuert.h
ex_fq_vollzugsmeldung.cpp
ex_fq_vollzugsmeldung.h
# ex_erkundungsanfrage.cpp
# ex_erkundungsanfrage.h
ex_erkundungsergebnisse.cpp
ex_erkundungsergebnisse.h
ex_fq_feuerkampf.cpp
ex_fq_feuerkampf.h
ex_fh_feuerhalt.cpp
ex_fh_feuerhalt.h
ex_sq_stellungsmeldung_fs.cpp
ex_sq_stellungsmeldung_fs.h
ex_sq_stellungsmeldung_ws.cpp
ex_sq_stellungsmeldung_ws.h
ex_sq_stellungsmeldung_lp.cpp
ex_sq_stellungsmeldung_lp.h
ex_sq_stellungswechsel.cpp
ex_sq_stellungswechsel.h
ex_hq_koordinierungsmassnahmen.cpp
ex_hq_koordinierungsmassnahmen.h
ex_hq_fuehrungslinien.cpp
ex_hq_fuehrungslinien.h
ex_tq_technische_quittung.cpp
ex_tq_technische_quittung.h
ex_aq_freitext.cpp
ex_aq_freitext.h
ex_mq_manuelle_quittung.cpp
ex_mq_manuelle_quittung.h
ex_flugbahnberechnung.cpp
ex_flugbahnberechnung.h
ex_flugbahndaten.cpp
ex_flugbahndaten.h
)
IF(BUILD_TESTING)
ADD_EXECUTABLE(tabModuleTestAdler ${LinkedSources} ${UnitTestSources}
msgcompares.h msgcompares.cpp)
TARGET_LINK_LIBRARIES(tabModuleTestAdler
NGLLogger
LtsCommandLineParser
nglsettings
nglapplication
saaTelegrams
Qt6::Network
${Qt6_WebSockets}
Qt6::Test
)
# ADD_TEST(NAME tabModuleTestAdler COMMAND $<TARGET_FILE:aesUnitTestTneAlgorithmen>)
ENDIF()
@@ -0,0 +1,66 @@
#include "ex_abmeldung.h"
#include <QtCore/QJsonDocument>
#include <QtTest/QTest>
#include <QtCore/QJsonDocument>
#include <AdlerJson/telegrams.h>
#include <AdlerJson/generatetelegrams.h>
TestExAbmeldung::TestExAbmeldung()
{
}
QString TestExAbmeldung::generateDisconnectMessage()
{
AdlerJson::EXDeregistration req;
GenerateTelegrams::addHeaderData(req, m_partyId);
GenerateTelegrams::generateAbmeldung(req);
QJsonObject messageObj =req.toJson();
QString message = QString::fromUtf8(QJsonDocument(messageObj).toJson());
return message;
}
void TestExAbmeldung::testExAbmeldung()
{
qDebug() << "----------------------";
qDebug() << "--- EX-Abmeldung ---";
QString disconnectMessage = generateDisconnectMessage();
QJsonDocument jsonDoc = QJsonDocument::fromJson(disconnectMessage.toUtf8());
const QJsonObject jsonObj = jsonDoc.object();
QJsonObject dataObj = jsonObj[AdlerJson::JsonKeys::DATA()].toObject();
AdlerJson::Abmeldedaten abmeldedaten;
bool bOk;
AdlerJson::abmeldedatenFromJson(dataObj, abmeldedaten, bOk);
QCOMPARE(abmeldedaten.partyId, m_partyId );
}
@@ -0,0 +1,24 @@
#pragma once
#include <QtCore/QString>
#include <QtTest/QTest>
namespace AdlerJson {
struct EXTelegramBase;
enum class Szenarstatus;
}
class TestExAbmeldung : public QObject {
Q_OBJECT
public:
TestExAbmeldung();
QString generateDisconnectMessage();
private slots:
void testExAbmeldung();
private:
int m_partyId {2};
};
@@ -0,0 +1,38 @@
#include "ex_anmeldebestaetigung.h"
#include <QtCore/QJsonDocument>
#include <QtTest/QTest>
#include <QtCore/QJsonDocument>
#include <AdlerJson/telegrams.h>
#include <AdlerJson/generatetelegrams.h>
TestExAnmeldebestaetigung::TestExAnmeldebestaetigung()
{
}
QString TestExAnmeldebestaetigung::generateAnmeldebestaetigung()
{
AdlerJson::ExAnmeldebestaetigung req;
GenerateTelegrams::addHeaderData(req, m_partyId);
GenerateTelegrams::generateConnectResponseMessage(req);
QJsonObject messageObj =req.toJson();
QString message = QString::fromUtf8(QJsonDocument(messageObj).toJson());
return message;
}
void TestExAnmeldebestaetigung::testExAnmeldebestaetigung()
{
qDebug() << "--------------------------------";
qDebug() << "--- EX-Anmeldebestaetigung ---";
QString connectMessage = generateAnmeldebestaetigung();
qDebug() << connectMessage;
QJsonDocument jsonDoc = QJsonDocument::fromJson(connectMessage.toUtf8());
const QJsonObject jsonObj = jsonDoc.object();
QJsonObject dataObj = jsonObj[AdlerJson::JsonKeys::DATA()].toObject();
// WIP: parsed from dataObj once the test body is completed
AdlerJson::AnBestaetigungsdaten anBestaetigungsdaten;
Q_UNUSED(anBestaetigungsdaten);
}
@@ -0,0 +1,27 @@
#pragma once
#include <QtCore/QString>
#include <QtTest/QTest>
namespace AdlerJson {
struct EXTelegramBase;
enum class Szenarstatus;
}
class TestExAnmeldebestaetigung : public QObject {
Q_OBJECT
public:
TestExAnmeldebestaetigung();
QString generateAnmeldebestaetigung();
private slots:
void testExAnmeldebestaetigung();
private:
int m_partyId {0};
int m_saaId {0};
};
@@ -0,0 +1,72 @@
#include "ex_anmeldung.h"
#include <QtCore/QJsonDocument>
#include <QtTest/QTest>
#include <QtCore/QJsonDocument>
#include <AdlerJson/telegrams.h>
#include <AdlerJson/generatetelegrams.h>
TestExAnmeldung::TestExAnmeldung()
{
}
QString TestExAnmeldung::generateConnectMessage()
{
AdlerJson::EXRegistration req;
GenerateTelegrams::addHeaderData(req, m_saaId);
GenerateTelegrams::generateConnectMessage(req, m_partyId);
QJsonObject messageObj =req.toJson();
QString message = QString::fromUtf8(QJsonDocument(messageObj).toJson());
return message;
}
void TestExAnmeldung::testExAnmeldung()
{
qDebug() << "----------------------";
qDebug() << "--- EX-Anmeldung ---";
QString connectMessage = generateConnectMessage();
QJsonDocument jsonDoc = QJsonDocument::fromJson(connectMessage.toUtf8());
const QJsonObject jsonObj = jsonDoc.object();
QJsonObject dataObj = jsonObj[AdlerJson::JsonKeys::DATA()].toObject();
AdlerJson::Anmeldedaten anmeldedaten;
bool bOk;
AdlerJson::anmeldedatenFromJson(dataObj, anmeldedaten, bOk);
QCOMPARE(anmeldedaten.partyId, m_partyId );
QCOMPARE(anmeldedaten.adlerVerbund, true);
QCOMPARE(anmeldedaten.szenar, QStringLiteral("UI Test") );
}
@@ -0,0 +1,26 @@
#pragma once
#include <QtCore/QString>
#include <QtTest/QTest>
namespace AdlerJson {
struct EXTelegramBase;
enum class Szenarstatus;
}
class TestExAnmeldung : public QObject {
Q_OBJECT
public:
TestExAnmeldung();
QString generateConnectMessage();
private slots:
void testExAnmeldung();
private:
int m_partyId {0};
int m_saaId {1};
};
@@ -0,0 +1,46 @@
#include "ex_aq_freitext.h"
#include <QtCore/QJsonDocument>
#include <QtTest/QTest>
#include <QtCore/QJsonDocument>
#include <AdlerJson/telegrams.h>
#include "msgcompares.h"
#include <AdlerJson/generatetelegrams.h>
TestExAqFreitextmeldung::TestExAqFreitextmeldung()
{
}
QString TestExAqFreitextmeldung::generateFreitextmeldung()
{
AdlerJson::ExAqFreitextmeldung req;
GenerateTelegrams::addHeaderData(req, m_saaId);
GenerateTelegrams::generateFreitextmeldung(req);
QJsonObject messageObj =req.toJson();
QString message = QString::fromUtf8(QJsonDocument(messageObj).toJson());
return message;
}
void TestExAqFreitextmeldung::testExAqFreitextmeldung()
{
qDebug() << "-----------------------------";
qDebug() << "--- EX-AQ Freitextmeldung ---";
QString freitextMessage = generateFreitextmeldung();
qDebug() << "EX-AQ Freitextmeldung=" << freitextMessage;
QJsonDocument jsonDoc = QJsonDocument::fromJson(freitextMessage.toUtf8());
const QJsonObject jsonObj = jsonDoc.object();
QJsonObject dataObj = jsonObj[AdlerJson::JsonKeys::DATA()].toObject();
AdlerJson::ExAqFreitextmeldung exAqFreitextmeldung;
bool bOk;
AdlerJson::FreitextDatenFromJson(dataObj, exAqFreitextmeldung.freitextDaten, bOk);
MsgCompares::compareFreitextDaten(exAqFreitextmeldung.freitextDaten);
}
@@ -0,0 +1,26 @@
#pragma once
#include <QtCore/QString>
#include <QtTest/QTest>
namespace AdlerJson {
struct EXTelegramBase;
enum class Szenarstatus;
}
class TestExAqFreitextmeldung : public QObject {
Q_OBJECT
public:
TestExAqFreitextmeldung();
QString generateFreitextmeldung();
private slots:
void testExAqFreitextmeldung();
private:
int m_partyId {0};
int m_saaId {1};
};
@@ -0,0 +1,39 @@
#include "ex_erkundungsanfrage.h"
#include <QtCore/QJsonDocument>
#include <QtTest/QTest>
#include <QtCore/QJsonDocument>
#include <AdlerJson/telegrams.h>
#include <AdlerJson/generatetelegrams.h>
TestExFqErkundungsanfrage::TestExFqErkundungsanfrage()
{
}
QString TestExFqErkundungsanfrage::generateErkundungsanfrage()
{
AdlerJson::ExErkundungsanfrage req;
GenerateTelegrams::addHeaderData(req, m_saaId);
GenerateTelegrams::generateErkundungsanfrage(req);
QJsonObject messageObj =req.toJson();
QString message = QString::fromUtf8(QJsonDocument(messageObj).toJson());
return message;
}
void TestExFqErkundungsanfrage::testExFqErkundungsanfrage()
{
qDebug() << "-----------------------------------------------------------";
qDebug() << "--- EX-Erkundungsanfrage - Anfrage Erkundungsergebnisse ---";
QString erkundungsanfrageMessage = generateErkundungsanfrage();
qDebug() << "generateErkundungsanfrage=" << erkundungsanfrageMessage;
QJsonDocument jsonDoc = QJsonDocument::fromJson(erkundungsanfrageMessage.toUtf8());
const QJsonObject jsonObj = jsonDoc.object();
QJsonObject dataObj = jsonObj[AdlerJson::JsonKeys::DATA()].toObject();
AdlerJson::Feuerkampfdaten feuerkampfdaten;
qDebug() << "Nur Header, kein Data-Bereich => keine Q-Compares fuer den Data-Bereich";
}
@@ -0,0 +1,26 @@
#pragma once
#include <QtCore/QString>
#include <QtTest/QTest>
namespace AdlerJson {
struct EXTelegramBase;
}
class TestExFqErkundungsanfrage : public QObject {
Q_OBJECT
public:
TestExFqErkundungsanfrage();
QString generateErkundungsanfrage();
private slots:
void testExFqErkundungsanfrage();
private:
int m_partyId {0};
int m_saaId {1};
};
@@ -0,0 +1,59 @@
#include "ex_erkundungsergebnisse.h"
#include <QtCore/QJsonDocument>
#include <QtTest/QTest>
#include <QtCore/QJsonDocument>
#include <AdlerJson/telegrams.h>
#include <AdlerJson/generatetelegrams.h>
TestExErkundungsergebnisse::TestExErkundungsergebnisse()
{
}
QString TestExErkundungsergebnisse::generateErkundungsergebnisse()
{
AdlerJson::ExErkundungsergebnisse req;
GenerateTelegrams::addHeaderData(req, m_saaId);
GenerateTelegrams::generateErkundungsergebnisse(req);
QJsonObject messageObj =req.toJson();
QString message = QString::fromUtf8(QJsonDocument(messageObj).toJson());
return message;
}
void TestExErkundungsergebnisse::testExErkundungsergebnisse()
{
qDebug() << "-------------------------------------------------------------";
qDebug() << "--- EX-Erkundungsergebnisse - Senden Erkundungsergebnisse ---";
QString erkundungsergebnisseMessage = generateErkundungsergebnisse();
qDebug() << "erkundungsergebnisseMessage=" << erkundungsergebnisseMessage;
QJsonDocument jsonDoc = QJsonDocument::fromJson(erkundungsergebnisseMessage.toUtf8());
const QJsonObject jsonObj = jsonDoc.object();
QJsonObject dataObj = jsonObj[AdlerJson::JsonKeys::DATA()].toObject();
AdlerJson::ExErkundungsergebnisse erkundungsergebnisse;
bool bOk;
AdlerJson::erkundungsdatenFromJson(dataObj, erkundungsergebnisse.erkundungsdaten, bOk);
QCOMPARE(erkundungsergebnisse.erkundungsdaten.einheit.r,5);
QCOMPARE(erkundungsergebnisse.erkundungsdaten.einheit.verein, QStringLiteral("verein Erkundungsdaten"));
QCOMPARE(erkundungsergebnisse.erkundungsdaten.ladeplatz.hoehe, 55);
QCOMPARE(erkundungsergebnisse.erkundungsdaten.ladeplatz.koordinate.latitude, 53.37790);
QCOMPARE(erkundungsergebnisse.erkundungsdaten.ladeplatz.koordinate.longitude, 8.758);
QCOMPARE(erkundungsergebnisse.erkundungsdaten.stellungen.waffenplaetze.size(), 2);
QCOMPARE(erkundungsergebnisse.erkundungsdaten.stellungen.waffenplaetze[0].hoehe, 56);
QCOMPARE(erkundungsergebnisse.erkundungsdaten.stellungen.waffenplaetze[0].koordinate.longitude, 8.759);
QCOMPARE(erkundungsergebnisse.erkundungsdaten.stellungen.waffenplaetze[0].koordinate.latitude, 53.37791);
QCOMPARE(erkundungsergebnisse.erkundungsdaten.stellungen.waffenplaetze[1].hoehe, 57);
QCOMPARE(erkundungsergebnisse.erkundungsdaten.stellungen.waffenplaetze[1].koordinate.longitude, 8.760);
QCOMPARE(erkundungsergebnisse.erkundungsdaten.stellungen.waffenplaetze[1].koordinate.latitude, 53.37792);
QCOMPARE(erkundungsergebnisse.erkundungsdaten.stellungen.wirkungsbereich.grundrichtung, 33);
QCOMPARE(erkundungsergebnisse.erkundungsdaten.stellungen.wirkungsbereich.links, 44);
QCOMPARE(erkundungsergebnisse.erkundungsdaten.stellungen.wirkungsbereich.rechts, 55);
}
@@ -0,0 +1,26 @@
#pragma once
#include <QtCore/QString>
#include <QtTest/QTest>
namespace AdlerJson {
struct EXTelegramBase;
enum class Szenarstatus;
}
class TestExErkundungsergebnisse : public QObject {
Q_OBJECT
public:
TestExErkundungsergebnisse();
QString generateErkundungsergebnisse();
private slots:
void testExErkundungsergebnisse();
private:
int m_partyId {0};
int m_saaId {1};
};
@@ -0,0 +1,46 @@
#include "ex_fh_feuerhalt.h"
#include <QtCore/QJsonDocument>
#include <QtTest/QTest>
#include <QtCore/QJsonDocument>
#include <AdlerJson/telegrams.h>
#include "msgcompares.h"
#include <AdlerJson/generatetelegrams.h>
TestExFeuerhalt::TestExFeuerhalt()
{
}
QString TestExFeuerhalt::generateFeuerhalt()
{
AdlerJson::ExFeuerhalt req;
GenerateTelegrams::addHeaderData(req, m_saaId);
GenerateTelegrams::generateFeuerhalt(req);
QJsonObject messageObj =req.toJson();
QString message = QString::fromUtf8(QJsonDocument(messageObj).toJson());
return message;
}
void TestExFeuerhalt::testExFeuerhalt()
{
qDebug() << "------------------------";
qDebug() << "--- EX-FH Feuer HALT ---";
QString feuerhaltMessage = generateFeuerhalt();
qDebug() << "feuerhaltMessage=" << feuerhaltMessage;
QJsonDocument jsonDoc = QJsonDocument::fromJson(feuerhaltMessage.toUtf8());
const QJsonObject jsonObj = jsonDoc.object();
QJsonObject dataObj = jsonObj[AdlerJson::JsonKeys::DATA()].toObject();
AdlerJson::FeuerHaltDaten feuerHaltDaten;
bool bOk;
AdlerJson::feuerHaltDatenFromJson(dataObj, feuerHaltDaten, bOk);
MsgCompares::compareFeuerHaltDaten(feuerHaltDaten);
}
@@ -0,0 +1,26 @@
#pragma once
#include <QtCore/QString>
#include <QtTest/QTest>
namespace AdlerJson {
struct EXTelegramBase;
enum class Szenarstatus;
}
class TestExFeuerhalt : public QObject {
Q_OBJECT
public:
TestExFeuerhalt();
QString generateFeuerhalt();
private slots:
void testExFeuerhalt();
private:
int m_partyId {0};
int m_saaId {1};
};
@@ -0,0 +1,44 @@
#include "ex_flugbahnberechnung.h"
#include <QtCore/QJsonDocument>
#include <QtTest/QTest>
#include <QtCore/QJsonDocument>
#include <AdlerJson/telegrams.h>
#include "msgcompares.h"
#include <AdlerJson/generatetelegrams.h>
TestExFlugbahnberechnung::TestExFlugbahnberechnung()
{
}
QString TestExFlugbahnberechnung::generateFlugbahnberechnung()
{
AdlerJson::ExFlugbahnberechnung req;
GenerateTelegrams::addHeaderData(req, m_saaId);
GenerateTelegrams::generateFlugbahnberechnung(req);
QJsonObject messageObj =req.toJson();
QString message = QString::fromUtf8(QJsonDocument(messageObj).toJson());
return message;
}
void TestExFlugbahnberechnung::testExFlugbahnberechnung()
{
qDebug() << "-----------------------------";
qDebug() << "--- EX-Flugbahnberechnung ---";
QString flugbahnberechnungMessage = generateFlugbahnberechnung();
qDebug() << "EX-Flugbahnberechnung=" << flugbahnberechnungMessage;
QJsonDocument jsonDoc = QJsonDocument::fromJson(flugbahnberechnungMessage.toUtf8());
const QJsonObject jsonObj = jsonDoc.object();
QJsonObject dataObj = jsonObj[AdlerJson::JsonKeys::DATA()].toObject();
AdlerJson::ExFlugbahnberechnung exFlugbahnberechnung;
bool bOk;
AdlerJson::exFlugbahnberechnungDatenFromJson(dataObj, exFlugbahnberechnung.flugbahnberechnungDaten, bOk);
MsgCompares::compareFlugbahnberechnungDaten(exFlugbahnberechnung.flugbahnberechnungDaten);
}
@@ -0,0 +1,26 @@
#pragma once
#include <QtCore/QString>
#include <QtTest/QTest>
namespace AdlerJson {
struct EXTelegramBase;
}
class TestExFlugbahnberechnung : public QObject {
Q_OBJECT
public:
TestExFlugbahnberechnung();
QString generateFlugbahnberechnung();
private slots:
void testExFlugbahnberechnung();
private:
int m_partyId {0};
int m_saaId {1};
};
@@ -0,0 +1,44 @@
#include "ex_flugbahndaten.h"
#include <QtCore/QJsonDocument>
#include <QtTest/QTest>
#include <QtCore/QJsonDocument>
#include <AdlerJson/telegrams.h>
#include "msgcompares.h"
#include <AdlerJson/generatetelegrams.h>
TestExFlugbahndaten::TestExFlugbahndaten()
{
}
QString TestExFlugbahndaten::generateFlugbahndaten()
{
AdlerJson::ExFlugbahndaten req;
GenerateTelegrams::addHeaderData(req, m_saaId);
GenerateTelegrams::generateFlugbahndaten(req);
QJsonObject messageObj =req.toJson();
QString message = QString::fromUtf8(QJsonDocument(messageObj).toJson());
return message;
}
void TestExFlugbahndaten::testExFlugbahndaten()
{
qDebug() << "-----------------------------";
qDebug() << "--- EX-Flugbahndaten ---";
QString flugbahndatenMessage = generateFlugbahndaten();
qDebug() << "EX-Flugbahndaten=" << flugbahndatenMessage;
QJsonDocument jsonDoc = QJsonDocument::fromJson(flugbahndatenMessage.toUtf8());
const QJsonObject jsonObj = jsonDoc.object();
QJsonObject dataObj = jsonObj[AdlerJson::JsonKeys::DATA()].toObject();
AdlerJson::ExFlugbahndaten exFlugbahndaten;
bool bOk;
AdlerJson::flugbahndatenFromJson(dataObj, exFlugbahndaten.flugbahndaten, bOk);
MsgCompares::compareFlugbahndaten(exFlugbahndaten.flugbahndaten);
}
@@ -0,0 +1,26 @@
#pragma once
#include <QtCore/QString>
#include <QtTest/QTest>
namespace AdlerJson {
struct EXTelegramBase;
}
class TestExFlugbahndaten : public QObject {
Q_OBJECT
public:
TestExFlugbahndaten();
QString generateFlugbahndaten();
private slots:
void testExFlugbahndaten();
private:
int m_partyId {0};
int m_saaId {1};
};
@@ -0,0 +1,47 @@
#include "ex_fq_abgefeuert.h"
#include <QtCore/QJsonDocument>
#include <QtTest/QTest>
#include <QtCore/QJsonDocument>
#include <AdlerJson/telegrams.h>
#include <AdlerJson/generatetelegrams.h>
TestExFqAbgefeuert::TestExFqAbgefeuert()
{
}
QString TestExFqAbgefeuert::generateAbgefeuertMessage()
{
AdlerJson::ExAbgefeuert req;
GenerateTelegrams::addHeaderData(req, m_saaId);
GenerateTelegrams::generateAbgefeuert(req);
QJsonObject messageObj =req.toJson();
QString message = QString::fromUtf8(QJsonDocument(messageObj).toJson());
return message;
}
void TestExFqAbgefeuert::testExFqAbgefeuert()
{
qDebug() << "---------------------------------------";
qDebug() << "--- EX-FQ(AF) Abgefeuert ---";
QString abgefeuertMessage = generateAbgefeuertMessage();
qDebug() << "abgefeuertMessage=" << abgefeuertMessage;
QJsonDocument jsonDoc = QJsonDocument::fromJson(abgefeuertMessage.toUtf8());
const QJsonObject jsonObj = jsonDoc.object();
QJsonObject dataObj = jsonObj[AdlerJson::JsonKeys::DATA()].toObject();
AdlerJson::Feuerkampfdaten feuerkampfdaten;
bool bOk;
AdlerJson::feuerkampfdatenFromJson(dataObj, feuerkampfdaten, bOk);
QCOMPARE(feuerkampfdaten.feuerkampfReferenz, QStringLiteral("feuerkampfReferenz 1"));
QCOMPARE(feuerkampfdaten.verein, QStringLiteral("AB7X"));
QCOMPARE(feuerkampfdaten.kenner, ProjectDataManagement::L27_EffectorId::B1);
}
@@ -0,0 +1,26 @@
#pragma once
#include <QtCore/QString>
#include <QtTest/QTest>
namespace AdlerJson {
struct EXTelegramBase;
enum class Szenarstatus;
}
class TestExFqAbgefeuert : public QObject {
Q_OBJECT
public:
TestExFqAbgefeuert();
QString generateAbgefeuertMessage();
private slots:
void testExFqAbgefeuert();
private:
int m_partyId {0};
int m_saaId {1};
};
@@ -0,0 +1,47 @@
#include "ex_fq_feuerbereit.h"
#include <QtCore/QJsonDocument>
#include <QtTest/QTest>
#include <QtCore/QJsonDocument>
#include <AdlerJson/telegrams.h>
#include <AdlerJson/generatetelegrams.h>
TestExFqFeuerbereit::TestExFqFeuerbereit()
{
}
QString TestExFqFeuerbereit::generateFeuerbereitMessage()
{
AdlerJson::ExFeuerbereit req;
GenerateTelegrams::addHeaderData(req, m_saaId);
GenerateTelegrams::generateFeuerbereit(req);
QJsonObject messageObj =req.toJson();
QString message = QString::fromUtf8(QJsonDocument(messageObj).toJson());
return message;
}
void TestExFqFeuerbereit::testExFqFeuerbereit()
{
qDebug() << "---------------------------------------";
qDebug() << "--- EX-FQ(FB) Feuerbereit ---";
QString feuerbereitMessage = generateFeuerbereitMessage();
qDebug() << "feuerbereitMessage=" << feuerbereitMessage;
QJsonDocument jsonDoc = QJsonDocument::fromJson(feuerbereitMessage.toUtf8());
const QJsonObject jsonObj = jsonDoc.object();
QJsonObject dataObj = jsonObj[AdlerJson::JsonKeys::DATA()].toObject();
AdlerJson::Feuerkampfdaten feuerkampfdaten;
bool bOk;
AdlerJson::feuerkampfdatenFromJson(dataObj, feuerkampfdaten, bOk);
QCOMPARE(feuerkampfdaten.feuerkampfReferenz, QStringLiteral("feuerkampfReferenz 1"));
QCOMPARE(feuerkampfdaten.verein, QStringLiteral("AB7X"));
QCOMPARE(feuerkampfdaten.kenner, ProjectDataManagement::L27_EffectorId::B1);
}
@@ -0,0 +1,26 @@
#pragma once
#include <QtCore/QString>
#include <QtTest/QTest>
namespace AdlerJson {
struct EXTelegramBase;
enum class Szenarstatus;
}
class TestExFqFeuerbereit : public QObject {
Q_OBJECT
public:
TestExFqFeuerbereit();
QString generateFeuerbereitMessage();
private slots:
void testExFqFeuerbereit();
private:
int m_partyId {0};
int m_saaId {1};
};
@@ -0,0 +1,38 @@
#include "ex_fq_feuerkampf.h"
#include <QtCore/QJsonDocument>
#include <QtTest/QTest>
#include <QtCore/QJsonDocument>
#include <AdlerJson/telegrams.h>
#include "msgcompares.h"
#include <AdlerJson/generatetelegrams.h>
TestExFqFeuerkampf::TestExFqFeuerkampf()
{
}
QString TestExFqFeuerkampf::generateFeuerkampf()
{
AdlerJson::ExFeuerkampf req;
GenerateTelegrams::addHeaderData(req, m_saaId);
GenerateTelegrams::generateFeuerkampf(req);
QJsonObject messageObj =req.toJson();
QString message = QString::fromUtf8(QJsonDocument(messageObj).toJson());
return message;
}
void TestExFqFeuerkampf::testExFqFeuerkampf()
{
qDebug() << "-------------------------------";
qDebug() << "--- EX-FQ(BA-BB) Feuerkampf ---";
QString feuerkampfMessage = generateFeuerkampf();
qDebug() << "feuerkampfMessage=" << feuerkampfMessage;
QJsonDocument jsonDoc = QJsonDocument::fromJson(feuerkampfMessage.toUtf8());
const QJsonObject jsonObj = jsonDoc.object();
QJsonObject dataObj = jsonObj[AdlerJson::JsonKeys::DATA()].toObject();
}
@@ -0,0 +1,26 @@
#pragma once
#include <QtCore/QString>
#include <QtTest/QTest>
namespace AdlerJson {
struct EXTelegramBase;
enum class Szenarstatus;
}
class TestExFqFeuerkampf : public QObject {
Q_OBJECT
public:
TestExFqFeuerkampf();
QString generateFeuerkampf();
private slots:
void testExFqFeuerkampf();
private:
int m_partyId {0};
int m_saaId {1};
};
@@ -0,0 +1,47 @@
#include "ex_fq_feuern.h"
#include <QtCore/QJsonDocument>
#include <QtTest/QTest>
#include <QtCore/QJsonDocument>
#include <AdlerJson/telegrams.h>
#include <AdlerJson/generatetelegrams.h>
TestExFqFeuern::TestExFqFeuern()
{
}
QString TestExFqFeuern::generateFeuernMessage()
{
AdlerJson::ExFeuern req;
GenerateTelegrams::addHeaderData(req, m_saaId);
GenerateTelegrams::generateFeuern(req);
QJsonObject messageObj =req.toJson();
QString message = QString::fromUtf8(QJsonDocument(messageObj).toJson());
return message;
}
void TestExFqFeuern::testExFqFeuern()
{
qDebug() << "---------------------------------------";
qDebug() << "--- EX-FQ(FN) Feuern ---";
QString feuernMessage = generateFeuernMessage();
qDebug() << "feuerbereitMessage=" << feuernMessage;
QJsonDocument jsonDoc = QJsonDocument::fromJson(feuernMessage.toUtf8());
const QJsonObject jsonObj = jsonDoc.object();
QJsonObject dataObj = jsonObj[AdlerJson::JsonKeys::DATA()].toObject();
AdlerJson::Feuerkampfdaten feuerkampfdaten;
bool bOk;
AdlerJson::feuerkampfdatenFromJson(dataObj, feuerkampfdaten, bOk);
QCOMPARE(feuerkampfdaten.feuerkampfReferenz, QStringLiteral("feuerkampfReferenz 1"));
QCOMPARE(feuerkampfdaten.verein, QStringLiteral("AB7X"));
QCOMPARE(feuerkampfdaten.kenner, ProjectDataManagement::L27_EffectorId::B1);
}
@@ -0,0 +1,26 @@
#pragma once
#include <QtCore/QString>
#include <QtTest/QTest>
namespace AdlerJson {
struct EXTelegramBase;
enum class Szenarstatus;
}
class TestExFqFeuern : public QObject {
Q_OBJECT
public:
TestExFqFeuern();
QString generateFeuernMessage();
private slots:
void testExFqFeuern();
private:
int m_partyId {0};
int m_saaId {1};
};
@@ -0,0 +1,48 @@
#include "ex_fq_vollzugsmeldung.h"
#include <QtCore/QJsonDocument>
#include <QtTest/QTest>
#include <QtCore/QJsonDocument>
#include <AdlerJson/telegrams.h>
#include <AdlerJson/generatetelegrams.h>
TestExFqVollzugsmeldung::TestExFqVollzugsmeldung()
{
}
QString TestExFqVollzugsmeldung::generateVollzugsmeldungMessage()
{
AdlerJson::ExVollzugsmeldung req;
GenerateTelegrams::addHeaderData(req, m_saaId);
GenerateTelegrams::generateVollzugsmeldung(req);
QJsonObject messageObj =req.toJson();
QString message = QString::fromUtf8(QJsonDocument(messageObj).toJson());
return message;
}
void TestExFqVollzugsmeldung::testExFqVollzugsmeldung()
{
qDebug() << "---------------------------------------";
qDebug() << "--- EX-FQ(VM) Vollzugsmeldung ---";
QString vollzugsmeldungMessage = generateVollzugsmeldungMessage();
qDebug() << "generateVollzugsmeldungMessage=" << vollzugsmeldungMessage;
QJsonDocument jsonDoc = QJsonDocument::fromJson(vollzugsmeldungMessage.toUtf8());
const QJsonObject jsonObj = jsonDoc.object();
QJsonObject dataObj = jsonObj[AdlerJson::JsonKeys::DATA()].toObject();
AdlerJson::Feuerkampfdaten feuerkampfdaten;
bool bOk;
AdlerJson::feuerkampfdatenFromJson(dataObj, feuerkampfdaten, bOk);
QCOMPARE(feuerkampfdaten.feuerkampfReferenz, QStringLiteral("feuerkampfReferenz 1"));
QCOMPARE(feuerkampfdaten.verein, QStringLiteral("AB7X"));
qDebug() << "L27_EffectorId=" << AdlerJson::waffensystemkennerMap.key(feuerkampfdaten.kenner);
QCOMPARE(feuerkampfdaten.kenner, ProjectDataManagement::L27_EffectorId::B1);
}
@@ -0,0 +1,26 @@
#pragma once
#include <QtCore/QString>
#include <QtTest/QTest>
namespace AdlerJson {
struct EXTelegramBase;
enum class Szenarstatus;
}
class TestExFqVollzugsmeldung : public QObject {
Q_OBJECT
public:
TestExFqVollzugsmeldung();
QString generateVollzugsmeldungMessage();
private slots:
void testExFqVollzugsmeldung();
private:
int m_partyId {0};
int m_saaId {1};
};
@@ -0,0 +1,59 @@
#include "ex_fq_wirkfeldplanung.h"
#include <QtCore/QJsonDocument>
#include <QtTest/QTest>
#include <QtCore/QJsonDocument>
#include <AdlerJson/telegrams.h>
#include "msgcompares.h"
#include <AdlerJson/generatetelegrams.h>
TestExFqWirkfeldplanung::TestExFqWirkfeldplanung()
{
}
QString TestExFqWirkfeldplanung::generateWirkfeldplanungMessage()
{
AdlerJson::ExAwesPlanning req;
GenerateTelegrams::addHeaderData(req, m_saaId);
GenerateTelegrams::generateEXFQBABBFK(req);
req.wirkfeldplanungData.feuerkampfReferenz = QStringLiteral("REF:2078669041");
QJsonObject messageObj =req.toJson();
QString message = QString::fromUtf8(QJsonDocument(messageObj).toJson());
return message;
}
void TestExFqWirkfeldplanung::testExFqWirkfeldplanung()
{
qDebug() << "---------------------------------------";
qDebug() << "--- EX-FQ(BA-BB-FK) Wirkfeldplanung ---";
QString wirkfeldplanungMessage = generateWirkfeldplanungMessage();
qDebug() << "wirkfeldplanungMessage= " << wirkfeldplanungMessage;
QJsonDocument jsonDoc = QJsonDocument::fromJson(wirkfeldplanungMessage.toUtf8());
const QJsonObject jsonObj = jsonDoc.object();
QJsonObject dataObj = jsonObj[AdlerJson::JsonKeys::DATA()].toObject();
AdlerJson::WirkfeldplanungData wirkfeldplanungData;
bool bOk;
AdlerJson::wirkfeldplanungDataFromJson(dataObj, wirkfeldplanungData, bOk);
QString messageFromJson = QString::fromUtf8(QJsonDocument(dataObj).toJson());
qDebug() << "wirkfeldplanungMessage From Json= " << messageFromJson;
QCOMPARE(wirkfeldplanungData.feuerkampfReferenz, QStringLiteral("REF:2078669041") );
MsgCompares::compareZieldaten(wirkfeldplanungData.zieldaten);
QCOMPARE(wirkfeldplanungData.abfeuerungsArt, AdlerJson::Abfeuerungsart::A);
QCOMPARE(wirkfeldplanungData.forderung, ProjectDataManagement::L7_Request::VER);
QCOMPARE(wirkfeldplanungData.dauer, 30);
qDebug() << "--- Feuerkommandos: ---";
MsgCompares::compareFeuerkommando(wirkfeldplanungData.feuerkommando);
}
@@ -0,0 +1,26 @@
#pragma once
#include <QtCore/QString>
#include <QtTest/QTest>
namespace AdlerJson {
struct EXTelegramBase;
enum class Szenarstatus;
}
class TestExFqWirkfeldplanung : public QObject {
Q_OBJECT
public:
TestExFqWirkfeldplanung();
QString generateWirkfeldplanungMessage();
private slots:
void testExFqWirkfeldplanung();
private:
int m_partyId {0};
int m_saaId {1};
};
@@ -0,0 +1,46 @@
#include "ex_hq_fuehrungslinien.h"
#include <QtCore/QJsonDocument>
#include <QtTest/QTest>
#include <QtCore/QJsonDocument>
#include <AdlerJson/telegrams.h>
#include "msgcompares.h"
#include <AdlerJson/generatetelegrams.h>
TestExHqFuehrungslinien::TestExHqFuehrungslinien()
{
}
QString TestExHqFuehrungslinien::generateFuehrungslinien()
{
AdlerJson::ExHqFuehrungslinien req;
GenerateTelegrams::addHeaderData(req, m_saaId);
GenerateTelegrams::generateFuehrungslinien(req);
QJsonObject messageObj =req.toJson();
QString message = QString::fromUtf8(QJsonDocument(messageObj).toJson());
return message;
}
void TestExHqFuehrungslinien::testExHqFuehrungslinien()
{
qDebug() << "-------------------------------------------";
qDebug() << "--- EX-HQ(G) Fuehrungslinien und Grenzen ---";
QString fuehrungslinienMessage = generateFuehrungslinien();
qDebug() << "EX-HQ(G) Fuehrungslinien und Grenzen=" << fuehrungslinienMessage;
QJsonDocument jsonDoc = QJsonDocument::fromJson(fuehrungslinienMessage.toUtf8());
const QJsonObject jsonObj = jsonDoc.object();
QJsonObject dataObj = jsonObj[AdlerJson::JsonKeys::DATA()].toObject();
AdlerJson::ExHqFuehrungslinien exHqFuehrungslinien;
bool bOk;
AdlerJson::fuehrungsdatenFromJson(dataObj, exHqFuehrungslinien.fuehrungsdaten, bOk);
MsgCompares::compareFuehrungsdaten(exHqFuehrungslinien.fuehrungsdaten);
}
@@ -0,0 +1,26 @@
#pragma once
#include <QtCore/QString>
#include <QtTest/QTest>
namespace AdlerJson {
struct EXTelegramBase;
}
class TestExHqFuehrungslinien : public QObject {
Q_OBJECT
public:
TestExHqFuehrungslinien();
QString generateFuehrungslinien();
private slots:
void testExHqFuehrungslinien();
private:
int m_partyId {0};
int m_saaId {1};
};
@@ -0,0 +1,46 @@
#include "ex_hq_koordinierungsmassnahmen.h"
#include <QtCore/QJsonDocument>
#include <QtTest/QTest>
#include <QtCore/QJsonDocument>
#include <AdlerJson/telegrams.h>
#include "msgcompares.h"
#include <AdlerJson/generatetelegrams.h>
TestExHqKoordinierungsmassnahmen::TestExHqKoordinierungsmassnahmen()
{
}
QString TestExHqKoordinierungsmassnahmen::generateKoordinierungsmassnahmen()
{
AdlerJson::ExHqKoordinierungsmassnahmen req;
GenerateTelegrams::addHeaderData(req, m_saaId);
GenerateTelegrams::generateKoordinierungsmassnahmen(req);
QJsonObject messageObj =req.toJson();
QString message = QString::fromUtf8(QJsonDocument(messageObj).toJson());
return message;
}
void TestExHqKoordinierungsmassnahmen::testExHqKoordinierungsmassnahmen()
{
qDebug() << "-----------------------------------------";
qDebug() << "--- EX-HQ(K) Koordinierungsmassnahmen ---";
QString koordinierungsmassnahmenMessage = generateKoordinierungsmassnahmen();
qDebug() << "EX-HQ(K) Koordinierungsmassnahmen=" << koordinierungsmassnahmenMessage;
QJsonDocument jsonDoc = QJsonDocument::fromJson(koordinierungsmassnahmenMessage.toUtf8());
const QJsonObject jsonObj = jsonDoc.object();
QJsonObject dataObj = jsonObj[AdlerJson::JsonKeys::DATA()].toObject();
AdlerJson::ExHqKoordinierungsmassnahmen exHqKoordinierungsmassnahmen;
bool bOk;
AdlerJson::koordinierungsdatenFromJson(dataObj, exHqKoordinierungsmassnahmen.koordinierungsdaten, bOk);
MsgCompares::compareKoordinierungsdaten(exHqKoordinierungsmassnahmen.koordinierungsdaten);
}
@@ -0,0 +1,26 @@
#pragma once
#include <QtCore/QString>
#include <QtTest/QTest>
namespace AdlerJson {
struct EXTelegramBase;
enum class Szenarstatus;
}
class TestExHqKoordinierungsmassnahmen : public QObject {
Q_OBJECT
public:
TestExHqKoordinierungsmassnahmen();
QString generateKoordinierungsmassnahmen();
private slots:
void testExHqKoordinierungsmassnahmen();
private:
int m_partyId {0};
int m_saaId {1};
};
@@ -0,0 +1,44 @@
#include "ex_mq_manuelle_quittung.h"
#include <QtCore/QJsonDocument>
#include <QtTest/QTest>
#include <QtCore/QJsonDocument>
#include <AdlerJson/telegrams.h>
#include "msgcompares.h"
#include <AdlerJson/generatetelegrams.h>
TestExMqManuelleQuittung::TestExMqManuelleQuittung()
{
}
QString TestExMqManuelleQuittung::generateManuelleQuittung()
{
AdlerJson::ExMqManuelleQuittung req;
GenerateTelegrams::addHeaderData(req, m_saaId);
GenerateTelegrams::generateManuelleQuittung(req);
QJsonObject messageObj =req.toJson();
QString message = QString::fromUtf8(QJsonDocument(messageObj).toJson());
return message;
}
void TestExMqManuelleQuittung::testExMqManuelleQuittung()
{
qDebug() << "-------------------------------";
qDebug() << "--- EX-MQ Manuelle Quittung ---";
QString manuelleQuittungMessage = generateManuelleQuittung();
qDebug() << "EX-MQ Manuelle Quittung=" << manuelleQuittungMessage;
QJsonDocument jsonDoc = QJsonDocument::fromJson(manuelleQuittungMessage.toUtf8());
const QJsonObject jsonObj = jsonDoc.object();
QJsonObject dataObj = jsonObj[AdlerJson::JsonKeys::DATA()].toObject();
AdlerJson::ExMqManuelleQuittung exMqManuelleQuittung;
bool bOk;
AdlerJson::mqManuelleQuittungDatenFromJson(dataObj, exMqManuelleQuittung.mqManuelleQuittungDaten, bOk);
MsgCompares::compareManuelleQuittungDaten(exMqManuelleQuittung.mqManuelleQuittungDaten);
}
@@ -0,0 +1,26 @@
#pragma once
#include <QtCore/QString>
#include <QtTest/QTest>
namespace AdlerJson {
struct EXTelegramBase;
}
class TestExMqManuelleQuittung : public QObject {
Q_OBJECT
public:
TestExMqManuelleQuittung();
QString generateManuelleQuittung();
private slots:
void testExMqManuelleQuittung();
private:
int m_partyId {0};
int m_saaId {1};
};
@@ -0,0 +1,46 @@
#include "ex_sq_stellungsmeldung_fs.h"
#include <QtCore/QJsonDocument>
#include <QtTest/QTest>
#include <QtCore/QJsonDocument>
#include <AdlerJson/telegrams.h>
#include "msgcompares.h"
#include <AdlerJson/generatetelegrams.h>
TestExStellungsmeldungFS::TestExStellungsmeldungFS()
{
}
QString TestExStellungsmeldungFS::generateStellungFS()
{
AdlerJson::ExFeuerstellungFS req;
GenerateTelegrams::addHeaderData(req, m_saaId);
GenerateTelegrams::generateStellungsmeldungFS(req);
QJsonObject messageObj =req.toJson();
QString message = QString::fromUtf8(QJsonDocument(messageObj).toJson());
return message;
}
void TestExStellungsmeldungFS::testExStellungsmeldungFS()
{
qDebug() << "------------------------------------------------";
qDebug() << "--- EX-SQ(FS) Stellungsmeldung Feuerstellung ---";
QString stellungFSMessage = generateStellungFS();
qDebug() << "EX-SQ(FS) Stellungsmeldung Feuerstellung=" << stellungFSMessage;
QJsonDocument jsonDoc = QJsonDocument::fromJson(stellungFSMessage.toUtf8());
const QJsonObject jsonObj = jsonDoc.object();
QJsonObject dataObj = jsonObj[AdlerJson::JsonKeys::DATA()].toObject();
AdlerJson::Feuerstellungsdaten feuerstellungsdaten;
bool bOk;
AdlerJson::feuerstellungsdatenFromJson(dataObj, feuerstellungsdaten, bOk);
MsgCompares::compareFeuerstellungsdaten(feuerstellungsdaten);
}
@@ -0,0 +1,26 @@
#pragma once
#include <QtCore/QString>
#include <QtTest/QTest>
namespace AdlerJson {
struct EXTelegramBase;
enum class Szenarstatus;
}
class TestExStellungsmeldungFS : public QObject {
Q_OBJECT
public:
TestExStellungsmeldungFS();
QString generateStellungFS();
private slots:
void testExStellungsmeldungFS();
private:
int m_partyId {0};
int m_saaId {1};
};
@@ -0,0 +1,46 @@
#include "ex_sq_stellungsmeldung_lp.h"
#include <QtCore/QJsonDocument>
#include <QtTest/QTest>
#include <QtCore/QJsonDocument>
#include <AdlerJson/telegrams.h>
#include "msgcompares.h"
#include <AdlerJson/generatetelegrams.h>
TestExStellungsmeldungLP::TestExStellungsmeldungLP()
{
}
QString TestExStellungsmeldungLP::generateStellungLP()
{
AdlerJson::ExFeuerstellungLP req;
GenerateTelegrams::addHeaderData(req, m_saaId);
GenerateTelegrams::generateStellungsmeldungLP(req);
QJsonObject messageObj =req.toJson();
QString message = QString::fromUtf8(QJsonDocument(messageObj).toJson());
return message;
}
void TestExStellungsmeldungLP::testExStellungsmeldungLP()
{
qDebug() << "--------------------------------------------";
qDebug() << "--- EX-SQ(LP) Stellungsmeldung Ladeplatz ---";
QString stellungLPMessage = generateStellungLP();
qDebug() << "EX-SQ(LP) Stellungsmeldung Ladeplatz=" << stellungLPMessage;
QJsonDocument jsonDoc = QJsonDocument::fromJson(stellungLPMessage.toUtf8());
const QJsonObject jsonObj = jsonDoc.object();
QJsonObject dataObj = jsonObj[AdlerJson::JsonKeys::DATA()].toObject();
AdlerJson::Ladeplatzdaten ladeplatzdaten;
bool bOk;
AdlerJson::ladeplatzdatenFromJson(dataObj, ladeplatzdaten, bOk);
MsgCompares::compareLadeplatzdaten(ladeplatzdaten);
}
@@ -0,0 +1,26 @@
#pragma once
#include <QtCore/QString>
#include <QtTest/QTest>
namespace AdlerJson {
struct EXTelegramBase;
enum class Szenarstatus;
}
class TestExStellungsmeldungLP : public QObject {
Q_OBJECT
public:
TestExStellungsmeldungLP();
QString generateStellungLP();
private slots:
void testExStellungsmeldungLP();
private:
int m_partyId {0};
int m_saaId {1};
};
@@ -0,0 +1,46 @@
#include "ex_sq_stellungsmeldung_ws.h"
#include <QtCore/QJsonDocument>
#include <QtTest/QTest>
#include <QtCore/QJsonDocument>
#include <AdlerJson/telegrams.h>
#include "msgcompares.h"
#include <AdlerJson/generatetelegrams.h>
TestExStellungsmeldungWS::TestExStellungsmeldungWS()
{
}
QString TestExStellungsmeldungWS::generateStellungWS()
{
AdlerJson::ExFeuerstellungWS req;
GenerateTelegrams::addHeaderData(req, m_saaId);
GenerateTelegrams::generateStellungsmeldungWS(req);
QJsonObject messageObj =req.toJson();
QString message = QString::fromUtf8(QJsonDocument(messageObj).toJson());
return message;
}
void TestExStellungsmeldungWS::testExStellungsmeldungWS()
{
qDebug() << "------------------------------------------------";
qDebug() << "--- EX-SQ(WS) Stellungsmeldung Waffensystem ---";
QString stellungWSMessage = generateStellungWS();
qDebug() << "EX-SQ(WS) Stellungsmeldung Waffensystem=" << stellungWSMessage;
QJsonDocument jsonDoc = QJsonDocument::fromJson(stellungWSMessage.toUtf8());
const QJsonObject jsonObj = jsonDoc.object();
QJsonObject dataObj = jsonObj[AdlerJson::JsonKeys::DATA()].toObject();
AdlerJson::Waffensystemdaten waffensystemdaten;
bool bOk;
AdlerJson::waffensystemdatenFromJson(dataObj, waffensystemdaten, bOk);
MsgCompares::compareWaffensystemdaten(waffensystemdaten);
}
@@ -0,0 +1,26 @@
#pragma once
#include <QtCore/QString>
#include <QtTest/QTest>
namespace AdlerJson {
struct EXTelegramBase;
enum class Szenarstatus;
}
class TestExStellungsmeldungWS : public QObject {
Q_OBJECT
public:
TestExStellungsmeldungWS();
QString generateStellungWS();
private slots:
void testExStellungsmeldungWS();
private:
int m_partyId {0};
int m_saaId {1};
};
@@ -0,0 +1,47 @@
#include "ex_sq_stellungswechsel.h"
#include <QtCore/QJsonDocument>
#include <QtTest/QTest>
#include <QtCore/QJsonDocument>
#include <AdlerJson/telegrams.h>
#include "msgcompares.h"
#include <AdlerJson/generatetelegrams.h>
TestExStellungswechsel::TestExStellungswechsel()
{
}
QString TestExStellungswechsel::generateStellungswechsel()
{
AdlerJson::ExStellungswechsel req;
GenerateTelegrams::addHeaderData(req, m_saaId);
GenerateTelegrams::generateStellungswechsel(req);
QJsonObject messageObj =req.toJson();
QString message = QString::fromUtf8(QJsonDocument(messageObj).toJson());
return message;
}
void TestExStellungswechsel::testExStellungswechsel()
{
qDebug() << "---------------------------";
qDebug() << "--- EX-Stellungswechsel ---";
QString stellungswechselMessage = generateStellungswechsel();
qDebug() << "EX-Stellungswechsel=" << stellungswechselMessage;
QJsonDocument jsonDoc = QJsonDocument::fromJson(stellungswechselMessage.toUtf8());
const QJsonObject jsonObj = jsonDoc.object();
QJsonObject dataObj = jsonObj[AdlerJson::JsonKeys::DATA()].toObject();
AdlerJson::Stellungswechseldaten stellungswechseldaten;
bool bOk;
AdlerJson::stellungswechseldatenFromJson(dataObj, stellungswechseldaten, bOk);
MsgCompares::compareStellungswechseldaten(stellungswechseldaten);
}
@@ -0,0 +1,26 @@
#pragma once
#include <QtCore/QString>
#include <QtTest/QTest>
namespace AdlerJson {
struct EXTelegramBase;
enum class Szenarstatus;
}
class TestExStellungswechsel : public QObject {
Q_OBJECT
public:
TestExStellungswechsel();
QString generateStellungswechsel();
private slots:
void testExStellungswechsel();
private:
int m_partyId {0};
int m_saaId {1};
};
@@ -0,0 +1,70 @@
#include "ex_status.h"
#include <QtCore/QJsonDocument>
#include <QtTest/QTest>
#include <QtCore/QJsonDocument>
#include <AdlerJson/telegrams.h>
#include <AdlerJson/generatetelegrams.h>
TestExStatus::TestExStatus()
{
}
QString TestExStatus::generateStatusMessage()
{
AdlerJson::EXStatus req;
GenerateTelegrams::addHeaderData(req, m_saaId);
GenerateTelegrams::generateStatusMessage(req, AdlerJson::Szenarstatus::Aktiv);
QJsonObject messageObj =req.toJson();
QString message = QString::fromUtf8(QJsonDocument(messageObj).toJson());
qDebug() << "message=" << message;
qCritical().noquote() << "message=" << message;
return message;
}
void TestExStatus::testExStatus()
{
qDebug() << "----------------------------";
qDebug() << "--- EX-Status ---";
QString statusMessage = generateStatusMessage();
QJsonDocument jsonDoc = QJsonDocument::fromJson(statusMessage.toUtf8());
const QJsonObject jsonObj = jsonDoc.object();
QJsonObject dataObj = jsonObj[AdlerJson::JsonKeys::DATA()].toObject();
AdlerJson::EXStatus status;
bool bOk;
AdlerJson::statusFromJson(dataObj, status, bOk);
QCOMPARE(status.status, AdlerJson::Szenarstatus::Aktiv );
}
@@ -0,0 +1,23 @@
#pragma once
#include <QtCore/QString>
#include <QtTest/QTest>
namespace AdlerJson {
struct EXTelegramBase;
enum class Szenarstatus;
}
class TestExStatus : public QObject {
Q_OBJECT
public:
TestExStatus();
QString generateStatusMessage();
private slots:
void testExStatus();
private:
int m_saaId {0};
};
@@ -0,0 +1,46 @@
#include "ex_tq_technische_quittung.h"
#include <QtCore/QJsonDocument>
#include <QtTest/QTest>
#include <QtCore/QJsonDocument>
#include <AdlerJson/telegrams.h>
#include "msgcompares.h"
#include <AdlerJson/generatetelegrams.h>
TestExTqTechnischeQuittung::TestExTqTechnischeQuittung()
{
}
QString TestExTqTechnischeQuittung::generateTechnischeQuittung()
{
AdlerJson::ExTqTechnischeQuittung req;
GenerateTelegrams::addHeaderData(req, m_saaId);
GenerateTelegrams::generateTechnischeQuittung(req);
QJsonObject messageObj =req.toJson();
QString message = QString::fromUtf8(QJsonDocument(messageObj).toJson());
return message;
}
void TestExTqTechnischeQuittung::testExTqTechnischeQuittung()
{
qDebug() << "------------------------------------";
qDebug() << "--- EX-TQ Technische Quittierung ---";
QString fuehrungslinienMessage = generateTechnischeQuittung();
qDebug() << "EX-TQ Technische Quittierung=" << fuehrungslinienMessage;
QJsonDocument jsonDoc = QJsonDocument::fromJson(fuehrungslinienMessage.toUtf8());
const QJsonObject jsonObj = jsonDoc.object();
QJsonObject dataObj = jsonObj[AdlerJson::JsonKeys::DATA()].toObject();
AdlerJson::ExTqTechnischeQuittung exTqTechnischeQuittung;
bool bOk;
AdlerJson::technischeDatenFromJson(dataObj, exTqTechnischeQuittung.technischeDaten, bOk);
MsgCompares::compareTechnischeDaten(exTqTechnischeQuittung.technischeDaten);
}
@@ -0,0 +1,26 @@
#pragma once
#include <QtCore/QString>
#include <QtTest/QTest>
namespace AdlerJson {
struct EXTelegramBase;
}
class TestExTqTechnischeQuittung : public QObject {
Q_OBJECT
public:
TestExTqTechnischeQuittung();
QString generateTechnischeQuittung();
private slots:
void testExTqTechnischeQuittung();
private:
int m_partyId {0};
int m_saaId {1};
};
@@ -0,0 +1,328 @@
#include "msgcompares.h"
#include <QtTest/QTest>
MsgCompares::MsgCompares()
{
}
void MsgCompares::compareZieldaten(const AdlerJson::Zieldaten& zieldaten)
{
qDebug() << "--- Begin compareZieldaten EX-L12 ---";
QCOMPARE(zieldaten.nummer, 7);
QCOMPARE(zieldaten.geometrie, ProjectDataManagement::L4_TargetGeometry::Point);
qDebug() << "--- koordinate ---";
QCOMPARE(zieldaten.koordinate.hoehe, 0);
QCOMPARE(zieldaten.koordinate.koordinate.latitude, 53.0672);
QCOMPARE(zieldaten.koordinate.koordinate.longitude, 8.86687);
qDebug() << "--- relativKoordinate ---";
QCOMPARE(zieldaten.relativKoordinate.hoehe, 5);
QCOMPARE(zieldaten.relativKoordinate.koordinate.latitude, 53.8);
QCOMPARE(zieldaten.relativKoordinate.koordinate.longitude, 8.8);
QCOMPARE(zieldaten.breiteRadius, 25);
QCOMPARE(zieldaten.tiefe, 26);
QCOMPARE(zieldaten.zielachse, 17);
QCOMPARE(zieldaten.zog, 7);
QCOMPARE(zieldaten.elemente, 1);
QCOMPARE(zieldaten.typ, QStringLiteral("PERS"));
QCOMPARE(zieldaten.subTyp, QStringLiteral("APERS"));
qDebug() << "--- End compareZieldaten EX-L12 ---";
}
void MsgCompares::compareFlugbahnpunkt0(const AdlerJson::Flugbahnpunkt &flugbahnpunkt)
{
QCOMPARE(flugbahnpunkt.xRelativ, 200.0);
QCOMPARE(flugbahnpunkt.yRelativ, 77.0);
QCOMPARE(flugbahnpunkt.zRelativ, 300.0);
QCOMPARE(flugbahnpunkt.zeit, 17.0);
}
void MsgCompares::compareFlugbahnpunkt1(const AdlerJson::Flugbahnpunkt &flugbahnpunkt)
{
QCOMPARE(flugbahnpunkt.xRelativ, 900.0);
QCOMPARE(flugbahnpunkt.yRelativ, 177.0);
QCOMPARE(flugbahnpunkt.zRelativ, 700.0);
QCOMPARE(flugbahnpunkt.zeit, 19.0);
}
void MsgCompares::compareStreuung(const AdlerJson::Streuungsdaten &streuung)
{
QCOMPARE(streuung.seitenstreuungH, 0.7);
QCOMPARE(streuung.laengsstreuungH, 0.3);
QCOMPARE(streuung.seitenstreuung, 0.7);
QCOMPARE(streuung.laengsstreuung, 7.7);
}
void MsgCompares::compareFeuerkommando(const AdlerJson::Feuerkommando &feuerkommando)
{
QCOMPARE(feuerkommando.typ, ProjectDataManagement::L26_EffectingSystemType::RRohr);
qDebug() << "feuerkommando.wirkmittel.size=" << feuerkommando.wirkmittel.size();
AdlerJson::WirkmittelFeuerkommando wfk = feuerkommando.wirkmittel[0];
QCOMPARE(wfk.kenner, ProjectDataManagement::L27_EffectorId::B1);
AdlerJson::KoordinateMitHoehe ap = wfk.auftreffpunkt;
QCOMPARE(ap.hoehe, 0);
QCOMPARE(ap.koordinate.latitude, 53.0672);
QCOMPARE(ap.koordinate.longitude, 8.86687);
QCOMPARE(wfk.flugzeit, 30);
QCOMPARE(wfk.gipfelhoehe, 377);
QCOMPARE(wfk.schussrichtung, 177);
compareFlugbahnpunkt0(wfk.flugbahnpunkt[0]);
compareFlugbahnpunkt1(wfk.flugbahnpunkt[1]);
compareStreuung(wfk.streuung);
MsgCompares::compareFeuerkommandoGeschosse(wfk.geschoss);
compareWirkmittelFeuerkommandoRakete (feuerkommando.wirkmittelRakete);
}
void MsgCompares::compareWirkmittelFeuerkommandoRakete(const QVector<AdlerJson::WirkmittelFeuerkommandoRakete> &wfrs)
{
qDebug() << "compareFeuerkommando Rakete"
<< ", wfrs.size=" << wfrs.size()
<< ", wfrs[0].treffpunkte,size=" << wfrs[0].treffpunkte.size();
AdlerJson::Treffpunkt treffpunkt = wfrs[0].treffpunkte[0];
QCOMPARE (treffpunkt.anzahl, 1);
QCOMPARE (treffpunkt.koordinate.koordinate.latitude , 5.5);
QCOMPARE (treffpunkt.koordinate.koordinate.longitude, 6.6);
QCOMPARE (treffpunkt.koordinate.hoehe, 7);
QCOMPARE (wfrs[0].kenner , ProjectDataManagement::L27_EffectorId::B1);
QCOMPARE (wfrs[0].flugzeit, 456.3);
QCOMPARE (wfrs[0].gipfelhoehe, 300);
QCOMPARE (wfrs[0].schussrichtung, 30.0);
QCOMPARE (wfrs[0].fallwinkel, 5);
QCOMPARE (wfrs[0].anflug, ProjectDataManagement::L48_TrajectoryRocket::Nominal);
}
void MsgCompares::compareFeuerkommandoGeschosse(const AdlerJson::FeuerkommandoGeschosse &feuerkommandoGeschosse)
{
QCOMPARE(feuerkommandoGeschosse.geschosssorte, QStringLiteral("Mine DM72"));
QCOMPARE(feuerkommandoGeschosse.ladung, QStringLiteral("M DM72"));
QCOMPARE(feuerkommandoGeschosse.zuender, QStringLiteral("Aufschlag BB DM371"));
QCOMPARE(feuerkommandoGeschosse.zuenderFunktion, QStringLiteral("AZoV"));
QCOMPARE(feuerkommandoGeschosse.zuenderZeit, 0);
QCOMPARE(feuerkommandoGeschosse.anzahl, 7);
QCOMPARE(feuerkommandoGeschosse.intervall, 1.0);
}
void MsgCompares::compareFeuerHaltDaten(const AdlerJson::FeuerHaltDaten &feuerHaltDaten)
{
QCOMPARE(feuerHaltDaten.kategorie, ProjectDataManagement::L22_FireHaltCategory::L22_FireHaltCategory_E);
QCOMPARE(feuerHaltDaten.feuerkampfReferenz, QStringLiteral("feuerHaltDaten"));
QCOMPARE(feuerHaltDaten.zpNummer, 5);
QCOMPARE(feuerHaltDaten.koordinate.latitude, 53.37791);
QCOMPARE(feuerHaltDaten.koordinate.longitude, 8.759);
QCOMPARE(feuerHaltDaten.radius, 50);
}
void MsgCompares::compareFeuerstellungsdatenKoordinaten(const QVector<AdlerJson::KoordinateMitHoehe> &koordinaten)
{
QCOMPARE(koordinaten[0].hoehe, 22);
QCOMPARE(koordinaten[0].koordinate.latitude, 53.37792);
QCOMPARE(koordinaten[0].koordinate.longitude, 8.760);
QCOMPARE(koordinaten[1].hoehe, 23);
QCOMPARE(koordinaten[1].koordinate.latitude, 53.37793);
QCOMPARE(koordinaten[1].koordinate.longitude, 8.761);
}
void MsgCompares::compareGeschosse(const QVector<AdlerJson::Geschoss> &geschosse)
{
QCOMPARE(geschosse[0].geschosssorte, QStringLiteral("Mine DM72"));
QCOMPARE(geschosse[0].zuender, QStringLiteral("Doppel DM183"));
QCOMPARE(geschosse[0].ladung, QStringLiteral("M DM72"));
QCOMPARE(geschosse[0].anzahl, 6);
QCOMPARE(geschosse[1].geschosssorte, QStringLiteral("Leucht DM116"));
QCOMPARE(geschosse[1].ladung, QStringLiteral("B L8A1"));
QCOMPARE(geschosse[1].zuender, QStringLiteral("Aufschlag BB DM371"));
QCOMPARE(geschosse[1].anzahl, 7);
}
void MsgCompares::compareFeuerstellungsdaten(const AdlerJson::Feuerstellungsdaten &feuerstellungsdaten)
{
QCOMPARE(feuerstellungsdaten.typ, ProjectDataManagement::L26_EffectingSystemType::RRohr);
QCOMPARE(feuerstellungsdaten.status, ProjectDataManagement::L28_Status::Einsatzbereit);
QCOMPARE(feuerstellungsdaten.feuereinheit.verein, QStringLiteral("verein ExFeuerstellungFS"));
QCOMPARE(feuerstellungsdaten.feuereinheit.r, 5);
QCOMPARE(feuerstellungsdaten.feuereinheit.oi, ProjectDataManagement::L19_Oi::L19_Oi_L19_Oi_F3);
QCOMPARE(feuerstellungsdaten.mittelpunkt.koordinate.latitude, 53.37791);
QCOMPARE(feuerstellungsdaten.mittelpunkt.koordinate.longitude, 8.759);
QCOMPARE(feuerstellungsdaten.mittelpunkt.hoehe, 20);
MsgCompares::compareFeuerstellungsdatenKoordinaten(feuerstellungsdaten.koordinaten);
MsgCompares::compareGeschosse(feuerstellungsdaten.geschosse);
}
void MsgCompares::compareWaffensystemdaten(const AdlerJson::Waffensystemdaten &waffensystemdaten)
{
QCOMPARE(waffensystemdaten.typ, ProjectDataManagement::L26_EffectingSystemType::RRohr);
QCOMPARE(waffensystemdaten.kenner, ProjectDataManagement::L27_EffectorId::B1);
QCOMPARE(waffensystemdaten.status, ProjectDataManagement::L28_Status::NichtEinsatzbereit);
QCOMPARE(waffensystemdaten.einheit.verein, QStringLiteral("AB7X"));
QCOMPARE(waffensystemdaten.einheit.r, 6);
QCOMPARE(waffensystemdaten.einheit.oi, ProjectDataManagement::L19_Oi::L19_Oi_L19_Oi_F6);
MsgCompares::compareGeschosse(waffensystemdaten.geschosse);
QCOMPARE(waffensystemdaten.koordinate.koordinate.latitude, 53.088354);
QCOMPARE(waffensystemdaten.koordinate.koordinate.longitude, 8.853092);
QCOMPARE(waffensystemdaten.koordinate.hoehe, 20);
QCOMPARE(waffensystemdaten.wirkungsbereich.grundrichtung, 1);
QCOMPARE(waffensystemdaten.wirkungsbereich.links, 2);
QCOMPARE(waffensystemdaten.wirkungsbereich.rechts, 3);
}
void MsgCompares::compareLadeplatzdaten(const AdlerJson::Ladeplatzdaten &ladeplatzdaten)
{
QCOMPARE(ladeplatzdaten.einheit.oi , ProjectDataManagement::L19_Oi::L19_Oi_L19_Oi_F3);
QCOMPARE(ladeplatzdaten.einheit.r, 5);
QCOMPARE(ladeplatzdaten.einheit.verein, QStringLiteral("verein StellungsmeldungLP"));
QCOMPARE(ladeplatzdaten.koordinate.koordinate.latitude, 53.37791);
QCOMPARE(ladeplatzdaten.koordinate.koordinate.longitude, 8.759);
QCOMPARE(ladeplatzdaten.koordinate.hoehe, 20);
MsgCompares::compareGeschosse(ladeplatzdaten.geschosse);
}
void MsgCompares::compareStellungswechseldaten(const AdlerJson::Stellungswechseldaten &stellungswechseldaten)
{
QCOMPARE(stellungswechseldaten.oi, ProjectDataManagement::L19_Oi::L19_Oi_L19_Oi_F3);
QCOMPARE(stellungswechseldaten.r, 5);
QCOMPARE(stellungswechseldaten.verein, QStringLiteral("verein ExStellungswechsel"));
}
void MsgCompares::compareZeitAb(const AdlerJson::Zeitangabe_DTG &zeit)
{
QCOMPARE(zeit.stunden, 5);
QCOMPARE(zeit.minuten, 35);
QCOMPARE(zeit.sekunden, 55);
QCOMPARE(zeit.tag, 12);
QCOMPARE(zeit.monat, 11);
QCOMPARE(zeit.jahr, 2025);
QCOMPARE(zeit.ZVz, QStringLiteral("ZVz"));
QCOMPARE(zeit.ZDS, QStringLiteral("ZDS"));
QCOMPARE(zeit.ZDM, QStringLiteral("ZDM"));
}
void MsgCompares::compareZeitBis(const AdlerJson::Zeitangabe_DTG &zeit)
{
QCOMPARE(zeit.stunden, 5);
QCOMPARE(zeit.minuten, 35);
QCOMPARE(zeit.sekunden, 55);
QCOMPARE(zeit.tag, 13);
QCOMPARE(zeit.monat, 11);
QCOMPARE(zeit.jahr, 2025);
QCOMPARE(zeit.ZVz, QStringLiteral("ZVz"));
QCOMPARE(zeit.ZDS, QStringLiteral("ZDS"));
QCOMPARE(zeit.ZDM, QStringLiteral("ZDM"));
}
void MsgCompares::compareKoordinaten(const QVector<AdlerJson::Koordinate> &koordinaten)
{
QCOMPARE ( koordinaten[0].latitude, 53.37792 );
QCOMPARE ( koordinaten[0].longitude, 8.760 );
QCOMPARE ( koordinaten[1].latitude, 53.37793 );
QCOMPARE ( koordinaten[1].longitude, 8.761 );
}
void MsgCompares::compareKoordinierungsdaten(const AdlerJson::Koordinierungsdaten &koordinierungsdaten)
{
QCOMPARE(koordinierungsdaten.art, ProjectDataManagement::L25_KindGuidingLine::NFA);
QCOMPARE(koordinierungsdaten.name, QStringLiteral("Name ExHqKoordinierungsmassnahme"));
QCOMPARE(koordinierungsdaten.truppenteil, QStringLiteral("Truppenteil ExHqKoordinierungsmassnahme"));
compareZeitAb(koordinierungsdaten.ab);
compareZeitBis(koordinierungsdaten.bis);
compareKoordinaten(koordinierungsdaten.koordinaten);
QCOMPARE(koordinierungsdaten.mittelpunkt.latitude, 53.37794);
QCOMPARE(koordinierungsdaten.mittelpunkt.longitude, 8.762);
QCOMPARE(koordinierungsdaten.radius, 66);
QCOMPARE(koordinierungsdaten.maxGipfel, 123);
}
void MsgCompares::compareFuehrungsdaten(const AdlerJson::Fuehrungsdaten &fuehrungsdaten)
{
QCOMPARE(fuehrungsdaten.art, AdlerJson::Art_L24::AO);
QCOMPARE(fuehrungsdaten.name, QStringLiteral("Name EX-HQ(G) Führungslinien und Grenzen"));
compareZeitAb(fuehrungsdaten.ab);
compareZeitBis(fuehrungsdaten.bis);
compareKoordinaten(fuehrungsdaten.koordinaten);
QCOMPARE(fuehrungsdaten.linkerNachbar, QStringLiteral("linker Nachbar"));
QCOMPARE(fuehrungsdaten.rechterNachbar, QStringLiteral("rechter Nachbar"));
}
void MsgCompares::compareTechnischeDaten(const AdlerJson::TechnischeDaten &technischeDaten)
{
QCOMPARE(technischeDaten.status, AdlerJson::Status_L32::INV);
QCOMPARE(technischeDaten.beschreibung, QStringLiteral("Beschreibung technischer Status"));
}
void MsgCompares::compareFreitextDaten(const AdlerJson::FreitextDaten &freitextDaten)
{
QCOMPARE(freitextDaten.text, QStringLiteral("Freier Text"));
}
void MsgCompares::compareManuelleQuittungDaten(const AdlerJson::ManuelleQuittungDaten &manuelleQuittungDaten)
{
QCOMPARE(manuelleQuittungDaten.feuerkampfreferenz, QStringLiteral("Manuelle Quittung"));
}
void MsgCompares::compareFlugbahnberechnungDaten(const AdlerJson::FlugBerechnungsDaten &flugbahnberechnungDaten)
{
qDebug() << "compareFlugbahnberechnungDaten 1";
QCOMPARE(flugbahnberechnungDaten.geschoss.geschosssorte, QStringLiteral("SMArt DM702"));
qDebug() << "compareFlugbahnberechnungDaten 2";
QCOMPARE(flugbahnberechnungDaten.geschoss.ladung, QStringLiteral("M DM72"));
QCOMPARE(flugbahnberechnungDaten.geschoss.zuender, QStringLiteral("Aufschlag DM241"));
QCOMPARE(flugbahnberechnungDaten.geschoss.zuenderFunktion, QStringLiteral("AZoV"));
qDebug() << "compareFlugbahnberechnungDaten 3";
QCOMPARE(flugbahnberechnungDaten.sprenghoehe, 0);
qDebug() << "compareFlugbahnberechnungDaten 6";
QCOMPARE(flugbahnberechnungDaten.standort.hoehe, 55);
qDebug() << "compareFlugbahnberechnungDaten 7";
QCOMPARE(flugbahnberechnungDaten.standort.koordinate.latitude, 53.37787);
qDebug() << "compareFlugbahnberechnungDaten 8";
QCOMPARE(flugbahnberechnungDaten.standort.koordinate.longitude, 8.7573);
qDebug() << "compareFlugbahnberechnungDaten 9";
QCOMPARE(flugbahnberechnungDaten.waffensystem, ProjectDataManagement::L26_EffectingSystemType::RRohr);
qDebug() << "compareFlugbahnberechnungDaten 10";
qDebug() << "winkelgruppe=" << AdlerJson::winkelgruppeMap.key(flugbahnberechnungDaten.winkelgruppe);
QCOMPARE(flugbahnberechnungDaten.winkelgruppe, AdlerJson::Winkelgruppe::Untere);
}
void MsgCompares::compareFlugbahndaten(const AdlerJson::Flugbahndaten &flugbahndaten)
{
qDebug() << "compareFlugbahndaten";
QCOMPARE(flugbahndaten.fehlercode, AdlerJson::FlugbahnberechnungFehlercode::Ok);
qDebug() << "flugbahndaten.zielkoordinate.hoehe = "<< flugbahndaten.zielkoordinate.hoehe;
QCOMPARE(flugbahndaten.zielkoordinate.hoehe, 56);
QCOMPARE(flugbahndaten.zielkoordinate.koordinate.latitude, 52.482048);
QCOMPARE(flugbahndaten.zielkoordinate.koordinate.longitude, 11.583);
QCOMPARE(flugbahndaten.waffensystem, ProjectDataManagement::L26_EffectingSystemType::RRohr);
QCOMPARE(flugbahndaten.flugzeit, 300);
QCOMPARE(flugbahndaten.gipfelhoehe, 200);
QCOMPARE(flugbahndaten.schussrichtung, 45);
QCOMPARE(flugbahndaten.fallwinkel, 55);
QCOMPARE(flugbahndaten.flugbahnpunkt[0].zeit, 1);
QCOMPARE(flugbahndaten.flugbahnpunkt[0].xRelativ, 100);
QCOMPARE(flugbahndaten.flugbahnpunkt[0].yRelativ, 200);
QCOMPARE(flugbahndaten.flugbahnpunkt[0].zRelativ, 10);
QCOMPARE(flugbahndaten.flugbahnpunkt[1].zeit, 2);
QCOMPARE(flugbahndaten.flugbahnpunkt[1].xRelativ, 200);
QCOMPARE(flugbahndaten.flugbahnpunkt[1].yRelativ, 400);
QCOMPARE(flugbahndaten.flugbahnpunkt[1].zRelativ, 20);
QCOMPARE(flugbahndaten.streuung.laengsstreuung, 2.2);
QCOMPARE(flugbahndaten.streuung.seitenstreuung, 3.3);
QCOMPARE(flugbahndaten.streuung.laengsstreuungH, 4.4);
QCOMPARE(flugbahndaten.streuung.seitenstreuungH, 5.5);
QCOMPARE(flugbahndaten.geschoss.geschosssorte, QStringLiteral("Spreng DM121"));
QCOMPARE(flugbahndaten.geschoss.ladung, QStringLiteral("M DM72"));
QCOMPARE(flugbahndaten.geschoss.ladungsNummer, 5);
QCOMPARE(flugbahndaten.geschoss.zuender, QStringLiteral("Aufschlag DM241"));
QCOMPARE(flugbahndaten.geschoss.zuenderFunktion, QStringLiteral("AZoV"));
QCOMPARE(flugbahndaten.geschoss.zuenderZeit, 1000);
}
@@ -0,0 +1,38 @@
#ifndef MSGCOMPARES_H
#define MSGCOMPARES_H
#include <AdlerJson/telegrams.h>
class MsgCompares
{
public:
MsgCompares();
static void compareZieldaten(const AdlerJson::Zieldaten &zieldaten);
static void compareZielmeldedaten(const AdlerJson::Zielmeldedaten &zielmeldedaten);
static void compareFlugbahnpunkt0(const AdlerJson::Flugbahnpunkt &flugbahnpunkt);
static void compareFlugbahnpunkt1(const AdlerJson::Flugbahnpunkt &flugbahnpunkt);
static void compareStreuung(const AdlerJson::Streuungsdaten &streuung);
static void compareFeuerkommando(const AdlerJson::Feuerkommando &feuerkommando);
static void compareWirkmittelFeuerkommandoRakete(const QVector<AdlerJson::WirkmittelFeuerkommandoRakete> &wfrs);
static void compareFeuerkommandoGeschosse(const AdlerJson::FeuerkommandoGeschosse &feuerkommandoGeschosse);
static void compareFeuerHaltDaten(const AdlerJson::FeuerHaltDaten &feuerHaltDaten);
static void compareFeuerstellungsdatenKoordinaten(const QVector<AdlerJson::KoordinateMitHoehe> &koordinaten);
static void compareGeschosse(const QVector<AdlerJson::Geschoss> &geschosse);
static void compareFeuerstellungsdaten(const AdlerJson::Feuerstellungsdaten &feuerstellungsdaten);
static void compareWaffensystemdaten(const AdlerJson::Waffensystemdaten &waffensystemdaten);
static void compareLadeplatzdaten(const AdlerJson::Ladeplatzdaten &ladeplatzdaten);
static void compareStellungswechseldaten(const AdlerJson::Stellungswechseldaten &stellungswechseldaten);
static void compareZeitAb(const AdlerJson::Zeitangabe_DTG &zeit);
static void compareZeitBis(const AdlerJson::Zeitangabe_DTG &zeit);
static void compareKoordinaten(const QVector<AdlerJson::Koordinate> &koordinaten);
static void compareKoordinierungsdaten(const AdlerJson::Koordinierungsdaten &koordinierungsdaten);
static void compareFuehrungsdaten(const AdlerJson::Fuehrungsdaten &fuehrungsdaten);
static void compareTechnischeDaten(const AdlerJson::TechnischeDaten &technischeDaten);
static void compareFreitextDaten(const AdlerJson::FreitextDaten &freitextDaten);
static void compareManuelleQuittungDaten(const AdlerJson::ManuelleQuittungDaten &manuelleQuittungDaten);
static void compareFlugbahnberechnungDaten(const AdlerJson::FlugBerechnungsDaten &flugbahnberechnungDaten);
static void compareFlugbahndaten(const AdlerJson::Flugbahndaten &flugbahndaten);
};
#endif
@@ -0,0 +1,63 @@
#include <QtCore/QDebug>
#include <nglapplication/nglcoreapplication.h>
#include <QtCore/QJsonDocument>
#include <QtTest/QTest>
#include <AdlerJson/telegrams.h>
#include "ex_anmeldung.h"
#include "ex_abmeldung.h"
#include "ex_anmeldebestaetigung.h"
#include "ex_status.h"
#include "ex_fq_wirkfeldplanung.h"
#include "ex_fq_feuerbereit.h"
#include "ex_fq_feuern.h"
#include "ex_fq_abgefeuert.h"
#include "ex_fq_vollzugsmeldung.h"
#include "ex_erkundungsanfrage.h"
#include "ex_erkundungsergebnisse.h"
#include "ex_fq_feuerkampf.h"
#include "ex_fh_feuerhalt.h"
#include "ex_sq_stellungsmeldung_fs.h"
#include "ex_sq_stellungsmeldung_ws.h"
#include "ex_sq_stellungsmeldung_lp.h"
#include "ex_sq_stellungswechsel.h"
#include "ex_hq_koordinierungsmassnahmen.h"
#include "ex_hq_fuehrungslinien.h"
#include "ex_tq_technische_quittung.h"
#include "ex_aq_freitext.h"
#include "ex_mq_manuelle_quittung.h"
#include "ex_flugbahnberechnung.h"
#include "ex_flugbahndaten.h"
int main(int argc, char *argv[])
{
int status = 0;
status |= QTest::qExec(new TestExAnmeldung, argc, argv);
status |= QTest::qExec(new TestExAbmeldung, argc, argv);
status |= QTest::qExec(new TestExAnmeldebestaetigung, argc, argv);
status |= QTest::qExec(new TestExStatus, argc, argv);
status |= QTest::qExec(new TestExFqWirkfeldplanung, argc, argv);
status |= QTest::qExec(new TestExMqManuelleQuittung, argc, argv);
status |= QTest::qExec(new TestExFqFeuerbereit, argc, argv);
status |= QTest::qExec(new TestExFqFeuern, argc, argv);
status |= QTest::qExec(new TestExFqAbgefeuert, argc, argv);
status |= QTest::qExec(new TestExFqVollzugsmeldung, argc, argv);
status |= QTest::qExec(new TestExFqFeuerkampf, argc, argv);
status |= QTest::qExec(new TestExFeuerhalt, argc, argv);
status |= QTest::qExec(new TestExStellungsmeldungFS, argc, argv);
status |= QTest::qExec(new TestExStellungsmeldungWS, argc, argv);
status |= QTest::qExec(new TestExStellungsmeldungLP, argc, argv);
status |= QTest::qExec(new TestExErkundungsergebnisse, argc, argv);
status |= QTest::qExec(new TestExStellungswechsel, argc, argv);
status |= QTest::qExec(new TestExHqKoordinierungsmassnahmen, argc, argv);
status |= QTest::qExec(new TestExHqFuehrungslinien, argc, argv);
status |= QTest::qExec(new TestExTqTechnischeQuittung, argc, argv);
status |= QTest::qExec(new TestExAqFreitextmeldung, argc, argv);
status |= QTest::qExec(new TestExFlugbahnberechnung, argc, argv);
status |= QTest::qExec(new TestExFlugbahndaten, argc, argv);
return status;
}
@@ -0,0 +1,129 @@
<!DOCTYPE Samples>
<Samples>
<Sample>
<TopicName>LTS_ParticipantPosition</TopicName>
<TypeName>ParticipantManagement::ParticipantPosition</TypeName>
<Pause>1000</Pause>
<DdsData count="10" type="ParticipantManagement::ParticipantPosition" topic="LTS_ParticipantPosition">
<participantId>6</participantId>
<participantTypeId>55</participantTypeId>
<sampleTime>1712144768313</sampleTime>
<pos count="3" type="Core::GeoPosition">
<lon>0.15822</lon>
<lat>0.92582</lat>
<z>0</z>
</pos>
<partyId>2</partyId>
<buildingId>0</buildingId>
<roomId>0</roomId>
<reportingSource>4</reportingSource>
<mountedOn>0</mountedOn>
<mountedParticipants count="1">
<mountedParticipants.1>19</mountedParticipants.1>
</mountedParticipants>
</DdsData>
</Sample>
<Sample>
<TopicName>LTS_ParticipantPosition</TopicName>
<TypeName>ParticipantManagement::ParticipantPosition</TypeName>
<Pause>1000</Pause>
<DdsData count="10" type="ParticipantManagement::ParticipantPosition" topic="LTS_ParticipantPosition">
<participantId>7</participantId>
<participantTypeId>55</participantTypeId>
<sampleTime>1712144770797</sampleTime>
<pos count="3" type="Core::GeoPosition">
<lon>0.15516</lon>
<lat>0.92526</lat>
<z>0</z>
</pos>
<partyId>2</partyId>
<buildingId>0</buildingId>
<roomId>0</roomId>
<reportingSource>4</reportingSource>
<mountedOn>0</mountedOn>
<mountedParticipants count="1">
<mountedParticipants.1>19</mountedParticipants.1>
</mountedParticipants>
</DdsData>
</Sample>
<Sample>
<TopicName>LTS_ParticipantPosition</TopicName>
<TypeName>ParticipantManagement::ParticipantPosition</TypeName>
<Pause>1000</Pause>
<DdsData count="10" type="ParticipantManagement::ParticipantPosition" topic="LTS_ParticipantPosition">
<participantId>19</participantId>
<participantTypeId>78</participantTypeId>
<sampleTime>1712144810829</sampleTime>
<pos count="3" type="Core::GeoPosition">
<lon>0.155133</lon>
<lat>0.925933</lat>
<z>0</z>
</pos>
<partyId>2</partyId>
<buildingId>0</buildingId>
<roomId>0</roomId>
<reportingSource>4</reportingSource>
<mountedOn>0</mountedOn>
</DdsData>
</Sample>
<Sample>
<TopicName>LTS_ParticipantPosition</TopicName>
<TypeName>ParticipantManagement::ParticipantPosition</TypeName>
<Pause>1000</Pause>
<DdsData count="10" type="ParticipantManagement::ParticipantPosition" topic="LTS_ParticipantPosition">
<participantId>19</participantId>
<participantTypeId>78</participantTypeId>
<sampleTime>1712144810829</sampleTime>
<pos count="3" type="Core::GeoPosition">
<lon>0.155122</lon>
<lat>0.925922</lat>
<z>0</z>
</pos>
<partyId>2</partyId>
<buildingId>0</buildingId>
<roomId>0</roomId>
<reportingSource>4</reportingSource>
<mountedOn>0</mountedOn>
</DdsData>
</Sample>
<Sample>
<TopicName>LTS_ParticipantPosition</TopicName>
<TypeName>ParticipantManagement::ParticipantPosition</TypeName>
<Pause>1000</Pause>
<DdsData count="10" type="ParticipantManagement::ParticipantPosition" topic="LTS_ParticipantPosition">
<participantId>6</participantId>
<participantTypeId>55</participantTypeId>
<sampleTime>1712144768313</sampleTime>
<pos count="3" type="Core::GeoPosition">
<lon>0.15522</lon>
<lat>0.92522</lat>
<z>0</z>
</pos>
<partyId>2</partyId>
<buildingId>0</buildingId>
<roomId>0</roomId>
<reportingSource>4</reportingSource>
<mountedOn>0</mountedOn>
</DdsData>
</Sample>
<Sample>
<TopicName>LTS_ParticipantPosition</TopicName>
<TypeName>ParticipantManagement::ParticipantPosition</TypeName>
<Pause>1000</Pause>
<DdsData count="10" type="ParticipantManagement::ParticipantPosition" topic="LTS_ParticipantPosition">
<participantId>7</participantId>
<participantTypeId>55</participantTypeId>
<sampleTime>1712144770797</sampleTime>
<pos count="3" type="Core::GeoPosition">
<lon>0.155122</lon>
<lat>0.92522</lat>
<z>0</z>
</pos>
<partyId>2</partyId>
<buildingId>0</buildingId>
<roomId>0</roomId>
<reportingSource>4</reportingSource>
<mountedOn>0</mountedOn>
</DdsData>
</Sample>
</Samples>
@@ -0,0 +1,66 @@
<!DOCTYPE Samples>
<Samples>
<Sample>
<TopicName>LTS_ParticipantPosition</TopicName>
<TypeName>ParticipantManagement::ParticipantPosition</TypeName>
<Pause>1000</Pause>
<DdsData count="10" topic="LTS_ParticipantPosition" type="ParticipantManagement::ParticipantPosition">
<participantId>5</participantId>
<participantTypeId>55</participantTypeId>
<sampleTime>1712143792397</sampleTime>
<pos count="3" type="Core::GeoPosition">
<lon>0.154882</lon>
<lat>0.925997</lat>
<z>0</z>
</pos>
<partyId>2</partyId>
<buildingId>0</buildingId>
<roomId>0</roomId>
<reportingSource>4</reportingSource>
<mountedOn>0</mountedOn>
<mountedParticipants count="1">
<mountedParticipants.1>19</mountedParticipants.1>
</mountedParticipants>
</DdsData>
</Sample>
<Sample>
<TopicName>LTS_ParticipantPosition</TopicName>
<TypeName>ParticipantManagement::ParticipantPosition</TypeName>
<Pause>1000</Pause>
<DdsData count="10" topic="LTS_ParticipantPosition" type="ParticipantManagement::ParticipantPosition">
<participantId>19</participantId>
<participantTypeId>78</participantTypeId>
<sampleTime>1712143760647</sampleTime>
<pos count="3" type="Core::GeoPosition">
<lon>0.154922</lon>
<lat>0.925922</lat>
<z>0</z>
</pos>
<partyId>2</partyId>
<buildingId>0</buildingId>
<roomId>0</roomId>
<reportingSource>4</reportingSource>
<mountedOn>0</mountedOn>
</DdsData>
</Sample>
<Sample>
<TopicName>LTS_ParticipantPosition</TopicName>
<TypeName>ParticipantManagement::ParticipantPosition</TypeName>
<Pause>1000</Pause>
<DdsData count="10" topic="LTS_ParticipantPosition" type="ParticipantManagement::ParticipantPosition">
<participantId>19</participantId>
<participantTypeId>78</participantTypeId>
<sampleTime>1712143760647</sampleTime>
<pos count="3" type="Core::GeoPosition">
<lon>0.154933</lon>
<lat>0.925933</lat>
<z>0</z>
</pos>
<partyId>2</partyId>
<buildingId>0</buildingId>
<roomId>0</roomId>
<reportingSource>4</reportingSource>
<mountedOn>0</mountedOn>
</DdsData>
</Sample>
</Samples>
@@ -0,0 +1,17 @@
#pragma once
#include <QtCore/qglobal.h>
#ifndef SAATELEGRAMS_EXPORT
# ifdef BUILD_STATIC_LIBRARIES
# define SAATELEGRAMS_EXPORT
# else
# if defined(MAKE_SAATELEGRAMS_LIB)
# define SAATELEGRAMS_EXPORT Q_DECL_EXPORT
# else
# define SAATELEGRAMS_EXPORT Q_DECL_IMPORT
# endif
# endif
#endif
@@ -0,0 +1,106 @@
/**
* @RDE_HEADER@
* AesHandler for AdlerJson Plugin
* $Id: aes_handler.h 62304 2024-03-21 08:17:45Z ewert_j $
* $HeadURL: svn://slssvn/TDS/branches/product/features/ufom/Lts/Proxies/TrainingAreaBase/Plugins/AdlerJson/aes_handler.h $
* $Author: ewert_j $
* Created by Julius Ewert, ESIM, 2024-03-20
*/
#pragma once
#include "DDS/Core/function_reply_object.h"
#include "logger.h"
#include "main_dispatcher.h"
#include "telegrams.h"
#include <QDateTime>
#include <QHash>
#include <QObject>
#include <QUrl>
#include <AreaEffectSimulation/aes_dtc.h>
#include <AreaEffectSimulation/aes_ftc.h>
#include <LtsUtilsCore/data_modification_enum.h>
#include <LtsUtilsGuiDds/request_helper.h>
#include <ParticipantManagement/ppm.hpp>
#include <ParticipantManagement/ppm_dtc.h>
namespace AdlerJson
{
class MainDispatcher;
class AesHandler
: public QObject
, protected AreaEffectSimulation::Interface::Ftc::AirSupportImpactModifyReplyHandler
, protected AreaEffectSimulation::Interface::Ftc::OffRouteMineModifyReplyHandler
, protected AreaEffectSimulation::Interface::Ftc::EffectClusterModifyReplyHandler
, protected AreaEffectSimulation::Interface::Ftc::TrajectoryAdlerModifyReplyHandler
, protected NotificationManagement::Interface::Ftc::CreateNotificationReplyHandler
{
Q_OBJECT
public:
explicit AesHandler(std::shared_ptr<TrainingAreaBase::Interface::Fts> ftsTab, QObject *parent = nullptr);
bool init(MainDispatcher *mainDispatcher);
bool sendAesModifyRequest(const QJsonObject &obj);
bool sendExplosionArea(const QJsonObject &data);
// DDS Overrides
void onAirSupportImpactModifyReply(const Core::FunctionReplyObject &reply) override;
void onOffRouteMineModifyReply(const Core::FunctionReplyObject &replyObject) override;
void onEffectClusterModifyReply(const Core::FunctionReplyObject &replyObject) override;
void onCreateNotificationReply(const Core::FunctionReplyObject &replyObject) override;
// Internal
void onExplosionSingleChanged(const AreaEffectSimulation::ExplosionSingle &data, DataModification modType);
void onEffectClusterChanged(const AreaEffectSimulation::EffectCluster &data, DataModification modType);
void handleCreateSingleExplosion(const TrainingAreaBase::TetraIcd::CreateSingleExplosion &data);
void handleEXFire(const Feuerkampfdaten &data, int wsId);
void handleEXDontFire(const Feuerkampfdaten &data, int wsId);
// Reald Data
void sendTrajectoryAdlerModifyRequest(const WirkfeldplanungData &data, int participantId, int wirkmittelIndex, int aesId);
void handleEffectCluster(const WirkfeldplanungData &data, int wsId);
//
void removeAllPendingEffectCluster(int partyId);
std::shared_ptr<AreaEffectSimulation::Interface::Dtc> getDtc() { return m_dtcAes; };
std::shared_ptr<AreaEffectSimulation::Interface::Ftc> getFtc() { return m_ftcAes; };
private:
AreaEffectSimulation::Area createMinimumRect(int zone, const QVector<QPointF> &points);
signals:
void explosionSingleChanged(const QJsonObject &jsonObj);
private:
QList<qint32> findAllPendingEffectCluster(int partyId);
void handleAmmoCount(const Feuerkampfdaten &data, int saaPartyId, bool sendExVollzug = false);
private:
MainDispatcher *m_mainDispatcher;
std::shared_ptr<AreaEffectSimulation::Interface::Ftc> m_ftcAes;
std::shared_ptr<AreaEffectSimulation::Interface::Dtc> m_dtcAes;
std::shared_ptr<ParticipantManagement::Interface::Dtc> m_dtcPpm;
std::shared_ptr<TrainingAreaBase::DdsHandler> m_ddsHandler;
void onTrajectoryAdlerModifyReply(const Core::FunctionReplyObject &reply) override;
LtsUtils::RequestHelper *m_requestHelper;
QHash<int, AreaEffectSimulation::AesEffectState> m_singleExplosions;
WirkfeldplanungData m_wirkfeldPlanungsData;
QHash<int, QString> m_aesIdToFeuerkampfReferenz; // key = aesId, value = feuerkampfReferenz
QHash<QString, int> m_feuerkampReferenzAmmoCounter; // key = feuerkampfReferenz, value = AmmoCounter
QHash<QString, std::vector<ProjectDataManagement::L27_EffectorId>> m_feuerkampfReferenzWirkmittel; // key = feuerkampfReferenz, value = Kenner
QHash<QString, bool> m_feuerkampfReferenzUsedFeuerHalt; // key = feuerkampfReferenz, value = boolean -> if Feuerhalt was activ
int m_participantId;
int m_wirkmittelIndex;
int m_aesId;
QHash<int, int> aesIdWsId; // key = aesId value = wsId
LOGGER_T m_logger;
};
} // namespace AdlerJson
@@ -0,0 +1,57 @@
#include "asm_handler.h"
#include <QtCore/QJsonArray>
#include <QtCore/QJsonDocument>
#include <LtsUtils/LtsUtilsCore/dds_vector.h>
namespace AdlerJson
{
AsmHandler::AsmHandler(QObject *parent)
: QObject(parent)
, m_dtcAsm(nullptr)
, m_ftcAsm(nullptr)
, m_exerciseId(-1)
{}
bool AsmHandler::init(MainDispatcher* mainDispatcher)
{
m_ftcAsm = AssetManagement::Interface::Ftc::create(mainDispatcher->ddsHandler()->ddsConnector());
m_ftcAsm->enableAssetModify();
m_dtcAsm = AssetManagement::Interface::Dtc::create(mainDispatcher->ddsHandler()->ddsConnector());
if (!m_dtcAsm->enableAsset())
{
ERROR_LOG(m_logger)<<" Can't read data from ASM";
return false;
}
m_exerciseId = mainDispatcher->exerciseId();
m_dtcAsm->waitForHistoricalDataAsset(1000);
return true;
}
void AsmHandler::modifyAssetAdlerProperties(int assetId, bool isSaaConnected)
{
WARNING_LOG(m_logger)<<">> modify asset properties: set exerciseId: "<<m_exerciseId<<" assetName: "<<assetId;
AssetManagement::Asset asset = m_dtcAsm->asset(assetId);
if (asset.id() <= 0)
return;
QJsonObject assetPropsObj = QJsonDocument::fromJson(asset.properties().c_str()).object();
assetPropsObj[QStringLiteral("exerciseId")] = isSaaConnected ? m_exerciseId : -1;
asset.properties(QJsonDocument(assetPropsObj).toJson().toStdString());
m_ftcAsm->assetModifyRequest(asset);
}
void AsmHandler::onAssetModifyReply(const Core::FunctionReplyObject &reply)
{
DEBUG_LOG(m_logger) << "Got Function Reply error ? "<<reply.error();
}
}
@@ -0,0 +1,46 @@
#pragma once
#include "logger.h"
#include <AssetManagement/asm_dtc.h>
#include <AssetManagement/asm_ftc.h>
#include "main_dispatcher.h"
#include <QtCore/QObject>
namespace AssetManagement
{
namespace Interface
{
class Dtc;
class Ftc;
}
}
namespace AdlerJson
{
class MainDispatcher;
class AsmHandler : public QObject
, protected AssetManagement::Interface::Ftc::AssetModifyReplyHandler
{
Q_OBJECT
public:
explicit AsmHandler(QObject *parent = nullptr);
bool init(MainDispatcher* mainDispatcher);
std::shared_ptr<AssetManagement::Interface::Dtc> getDtc() { return m_dtcAsm; }
std::shared_ptr<AssetManagement::Interface::Ftc> getFtc() { return m_ftcAsm; }
void modifyAssetAdlerProperties(int assetId, bool isSaaConnected = false);
private:
void onAssetModifyReply(const Core::FunctionReplyObject &reply) override;
private:
NGL::INGLLogger &m_logger;
std::shared_ptr<AssetManagement::Interface::Dtc> m_dtcAsm;
std::shared_ptr<AssetManagement::Interface::Ftc> m_ftcAsm;
int m_exerciseId;
};
}
@@ -0,0 +1,272 @@
#include "flm_handler.h"
#include <utility>
#include "FileManagement/flm_operator_rights.h"
#include "main_dispatcher.h"
#include "nglsettings/nglsettings_settings.h"
#include "ngltools/ngltools_filesystem.h"
#include <QtCore/QJsonArray>
#include <QtCore/QJsonDocument>
#include <FileManagement/flm_dtc.h>
#include <LtsUtils/LtsUtilsCore/dds_vector.h>
namespace AdlerJson
{
FlmHandler::FlmHandler(QObject *parent)
: QObject(parent)
, m_exerciseId(-1)
, m_parentFolderId(-1)
, m_partyId(-1)
, m_folderHXMessagesId(-1)
, m_dtcFlm(nullptr)
, m_ftcFlm(nullptr)
, m_ftcNom(nullptr)
, m_opmDtc(nullptr)
{
}
bool FlmHandler::init(MainDispatcher *mainDispatcher)
{
m_mainDispatcher = mainDispatcher;
m_exerciseId = mainDispatcher->exerciseId();
m_dtcFlm = FileManagement::Interface::Dtc::create(mainDispatcher->ddsHandler()->ddsConnector());
m_ftcFlm = FileManagement::Interface::Ftc::create(mainDispatcher->ddsHandler()->ddsConnector());
m_dtcFlm->enableFileContent();
m_dtcFlm->enableFolder();
m_ftcFlm->enableFileContentModify();
m_ftcFlm->enablePathCreate();
m_ftcNom = NotificationManagement::Interface::Ftc::create(mainDispatcher->ddsHandler()->ddsConnector());
m_ftcNom->enableAll();
m_opmDtc = OperatorManagement::Interface::Dtc::create(mainDispatcher->ddsHandler()->ddsConnector());
m_opmDtc->enableUser();
return true;
}
bool FlmHandler::processHQMessage(int partyId, const QString &name, int meldungsnummer, const QJsonObject &obj)
{
ERROR_LOG(m_logger) << "exerciseId: " << m_exerciseId << ", partyId: " << partyId
<< ", name: " << name
<< ", meldungsnummer: " << meldungsnummer;
int partyFolderId = m_dtcFlm->getPartyFolderId(m_exerciseId, partyId);
const QString folderName = QStringLiteral("Messages");
int folderHXMessagesId = m_dtcFlm->findFolder(partyFolderId, folderName);
ERROR_LOG(m_logger) << "folderHXMessagesId: " << folderHXMessagesId;
if (folderHXMessagesId <= 0)
{
ERROR_LOG(m_logger) << "Folder Messages does not exist for exerciseId: " << m_exerciseId << ", partyId: " << partyId;
return false;
}
FileManagement::FileContentModifyRequest fileContentReq;
fileContentReq.isTemplate(false);
fileContentReq.isHidden(true);
fileContentReq.folderId(folderHXMessagesId);
const QVector<int> fldPath = LtsUtils::convert<QVector<int>>(m_dtcFlm->folder(folderHXMessagesId).path());
fileContentReq.fileCategory(FileManagement::FileCategory::Exercise);
fileContentReq.fileType(FileManagement::FileType::AdlerJson);
fileContentReq.fileStatus(FileManagement::FileStatus::Valid);
QByteArray content = QJsonDocument(obj).toJson(QJsonDocument::Compact).constData();
fileContentReq.content(LtsUtils::convert<std::vector<uint8_t>>(content));
fileContentReq.isUsedBy(false);
fileContentReq.usedBy(0);
fileContentReq.lastModified(m_mainDispatcher->ddsHandler()->partitionTime());
fileContentReq.exerciseId(m_exerciseId);
fileContentReq.operatorId(99);
DEBUG_LOG(m_logger) << "HQ: name: " << fileContentReq.name() << ", folderId: " << folderHXMessagesId << ", exerciseId: " << m_exerciseId << ", partyId: " << partyId;
QRegularExpression re(QStringLiteral("_\\d+$"));
QString baseName = name + QStringLiteral(" (") + QString::number(meldungsnummer) + QStringLiteral(")");
baseName.remove(re);
baseName = baseName.normalized(QString::NormalizationForm_C);
ERROR_LOG(m_logger) << "BaseName: " << baseName << "|";
QStringList fileNames;
if (!m_dtcFlm->getAllFiles(fileContentReq.fileType(), folderHXMessagesId, fileNames, true))
{
ERROR_LOG(m_logger) << "Error while reading fileNames for folderId: " << folderHXMessagesId;
return false;
}
int maxNumber = 0;
for (const QString &fileName : std::as_const(fileNames))
{
QString normalizedName = fileName.normalized(QString::NormalizationForm_C);
DEBUG_LOG(m_logger) << "normalized fileName: " << normalizedName << "|";
if (!normalizedName.startsWith(baseName))
continue;
QString rest = fileName.mid(baseName.length());
DEBUG_LOG(m_logger) << "rest: " << rest;
if (rest.contains(QStringLiteral(".")))
rest = rest.section(QStringLiteral("."), 0, 0);
if (rest.startsWith(QStringLiteral("_")))
rest = rest.mid(1);
if (rest.isEmpty())
maxNumber = std::max(maxNumber, 0);
else
{
bool ok;
int currentNum = rest.toInt(&ok);
if (ok)
maxNumber = std::max(maxNumber, currentNum);
}
DEBUG_LOG(m_logger) << " maxNumber: " << maxNumber;
}
const QString newName = baseName
+ QStringLiteral("_") + QString::number(++maxNumber);
DEBUG_LOG(m_logger) << "newName : " << newName;
fileContentReq.name(newName.toStdString());
m_partyId = partyId;
m_folderHXMessagesId = folderHXMessagesId;
m_ftcFlm->fileContentModifyRequest(fileContentReq, this);
return true;
}
void FlmHandler::createHQNotification(const int partyId, const int folderId, const int fileId)
{
qint64 currentTime = m_mainDispatcher->ddsHandler()->partitionTime();
QScopedPointer<NGL::Settings> s(new NGL::Settings(NGL::findProjectConfigFile()));
qint64 expiryTime = currentTime + s->getInteger(QStringLiteral("NOM/expiryIntervalMSec"), 2 * 24 * 60 * 60 * 1000);
NotificationManagement::NomNotification notif;
notif.title(tr("HQ Report").toStdString());
QString linkName = tr("Open HQ Report Dialog");
QString content = QStringLiteral("[%1](//flmHQReport/?party=%2&folder=%3&file=%4)").arg(linkName).arg(partyId).arg(folderId).arg(fileId);
QMap<QString, QString> linkMap;
parseContent(content, linkMap);
QMapIterator<QString, QString> it(linkMap);
while (it.hasNext())
{
it.next();
content = content.replace(QStringLiteral("[%1](%2)").arg(it.value(), it.key()), QStringLiteral("<a href='%1'>%2</a>").arg(it.key(), it.value()));
}
notif.content(content.toStdString());
notif.timeStamp(currentTime);
notif.expiryTime(expiryTime);
int prio = s->getInteger(QStringLiteral("NOM/notificationPriority"), 3);
DEBUG_LOG(m_logger) << " Setting: NotificationPriority: " << prio;
notif.priority(static_cast<NotificationManagement::Priority>(prio));
notif.processedPriority(NotificationManagement::Priority::Low);
notif.exerciseId(m_exerciseId);
for (const auto &userId : m_opmDtc->getOperatorsByOperatorRight(OperatorRights::FileManagementFilesEdit))
{
NotificationManagement::Address addr;
addr.addressId(userId);
addr.isRead(false);
addr.name(m_opmDtc->user(userId).name());
addr.addressType(NotificationManagement::AddressType::Operator);
notif.recipientIds().push_back(addr);
}
NotificationManagement::CreateNotificationRequest notifReq;
notifReq.notification(notif);
if (!m_ftcNom->createNotificationRequest(notifReq, this))
ERROR_LOG(m_logger) << "Error requesting create Notification data";
}
void FlmHandler::initHQFolders(int partyId)
{
int exerciseFolderId = m_dtcFlm->getExerciseFolderId(m_exerciseId);
if (exerciseFolderId <= 0)
{
ERROR_LOG(m_logger) << "No exercise Folder for exerciseId: " << m_exerciseId;
return;
}
const QString &partyName = m_dtcFlm->getPartyFolderName(partyId);
std::vector<std::string> vecFolderNames = {"HQ Data", partyName.toStdString(), "Messages"};
FileManagement::PathCreateRequest req;
req.path(vecFolderNames);
req.parentId(exerciseFolderId);
req.isEditable(false);
req.operatorId(99);
m_ftcFlm->pathCreateRequest(req, this);
}
void FlmHandler::onFileContentModifyReply(const Core::FunctionReplyObject &reply)
{
DEBUG_LOG(m_logger) << "Got Function Reply: " << reply.translated();
if (reply.error())
ERROR_LOG(m_logger) << "Error while insert HX Message: " << reply.translated() << ", error: " << reply.error();
else
createHQNotification(m_partyId, m_folderHXMessagesId, reply.id());
}
void FlmHandler::onPathCreateReply(const Core::FunctionReplyObject &reply)
{
DEBUG_LOG(m_logger) << "Got Function Reply: " << reply.translated();
if (reply.error())
{
ERROR_LOG(m_logger) << "Error while creating folders: " << reply.translated() << ", error: " << reply.error();
}
}
void FlmHandler::onCreateNotificationReply(const Core::FunctionReplyObject &replyObject)
{
INFO_LOG(m_logger) << "FlmHandler: Got createReply with id " << replyObject.id() << " and errorString " << replyObject.translated();
}
bool FlmHandler::parseContent(const QString &contentString, QMap<QString, QString> &retMap)
{
if (contentString.isEmpty())
return false;
QRegularExpression regLink(QStringLiteral("(?<=\\]\\()(.*?)(?=\\))"));
QRegularExpressionMatch matchLink = regLink.match(contentString);
QRegularExpression regDesc(QStringLiteral("(?<=\\[)(.*?)(?=\\]\\()"));
QRegularExpressionMatch matchDesc = regDesc.match(contentString);
QRegularExpressionMatchIterator itLink = regLink.globalMatch(contentString);
QRegularExpressionMatchIterator itDesc = regDesc.globalMatch(contentString);
while (itLink.hasNext() && itDesc.hasNext())
{
QString linkRef = itLink.next().captured();
QString linkDesc = itDesc.next().captured();
if (!linkRef.isEmpty() && !linkDesc.isEmpty())
{
retMap.insert(linkRef, linkDesc);
}
}
return retMap.size();
}
}
@@ -0,0 +1,62 @@
#pragma once
#include "logger.h"
#include <QtCore/QObject>
#include <Lts/Services/FileManagement/flm_ftc.h>
#include <NotificationManagement/nom_ftc.h>
#include <NotificationManagement/nom_ftc_types.h>
#include <OperatorManagement/opm_data_plugin_interface.h>
#include <TrainingAreaBase/dds_handler.h>
namespace FileManagement
{
namespace Interface
{
class Dtc;
}
}
namespace AdlerJson
{
class MainDispatcher;
class FlmHandler
: public QObject
, protected FileManagement::Interface::Ftc::FileContentModifyReplyHandler
, protected FileManagement::Interface::Ftc::PathCreateReplyHandler
, protected NotificationManagement::Interface::Ftc::CreateNotificationReplyHandler
{
Q_OBJECT
public:
explicit FlmHandler(QObject *parent = nullptr);
bool processHQMessage(int partyId, const QString &name, int meldungsnummer, const QJsonObject &obj);
void createHQNotification(const int partyId, const int folderId, const int fileId);
signals:
public slots:
bool init(MainDispatcher *mainDispatcher);
void initHQFolders(int partyId);
private:
void onFileContentModifyReply(const Core::FunctionReplyObject &reply) override;
void onPathCreateReply(const Core::FunctionReplyObject &reply) override;
void onCreateNotificationReply(const Core::FunctionReplyObject &replyObject) override final;
bool parseContent(const QString &contentString, QMap<QString, QString> &retMap);
private:
NGL::INGLLogger &m_logger;
MainDispatcher *m_mainDispatcher = nullptr;
int m_exerciseId;
int m_parentFolderId;
int m_partyId;
int m_folderHXMessagesId;
std::shared_ptr<FileManagement::Interface::Dtc> m_dtcFlm;
std::shared_ptr<FileManagement::Interface::Ftc> m_ftcFlm;
std::shared_ptr<NotificationManagement::Interface::Ftc> m_ftcNom;
std::shared_ptr<OperatorManagement::Interface::Dtc> m_opmDtc;
};
}
@@ -0,0 +1,845 @@
#include "generatetelegrams.h"
#include <QRandomGenerator>
GenerateTelegrams::GenerateTelegrams() {}
void GenerateTelegrams::addHeaderData(AdlerJson::EXTelegramBase &tele, const int saaId, const QString referenceUuid)
{
tele.sender = QStringLiteral("SAA%1@GUEZ.DE").arg(saaId);
tele.receiver = QStringLiteral("EXCON@GUEZ.DE");
tele.timestamp = QDateTime::currentDateTime().toString(Qt::DateFormat::ISODate);
tele.referenceUuid = referenceUuid;
}
void GenerateTelegrams::generateConnectMessage(AdlerJson::EXRegistration &exRegistration, int partyId, bool isVerbund)
{
exRegistration.partyId = partyId;
exRegistration.adlerVerbund = isVerbund;
exRegistration.szenar = QStringLiteral("UI Test");
}
void GenerateTelegrams::generateConnectResponseMessage(AdlerJson::ExAnmeldebestaetigung &exAnmeldebestaetigung)
{
exAnmeldebestaetigung.anBestaetigungsdaten.error = AdlerJson::L45_AnmeldebestaetigungFehlercode::Ok;
}
void GenerateTelegrams::generateDisconnectMessage(AdlerJson::EXDeregistration &eXDeregistration, int partyId) { eXDeregistration.partyId = partyId; }
void GenerateTelegrams::generateStatusMessage(AdlerJson::EXStatus &exStatus, AdlerJson::Szenarstatus status) { exStatus.status = status; }
void GenerateTelegrams::generateConnectionTestMessage() {}
void GenerateTelegrams::generateZieldaten(AdlerJson::Zieldaten &wzd)
{
wzd.nummer = 7;
wzd.geometrie = ProjectDataManagement::L4_TargetGeometry::Point;
AdlerJson::KoordinateMitHoehe zap;
zap.hoehe = 0;
AdlerJson::Koordinate zkn;
zkn.latitude = 53.0672;
zkn.longitude = 8.86687;
zap.koordinate = zkn;
wzd.koordinate = zap;
AdlerJson::KoordinateMitHoehe zapr;
zapr.hoehe = 5;
zapr.koordinate.latitude = 53.8;
zapr.koordinate.longitude = 8.8;
wzd.relativKoordinate = zapr;
wzd.breiteRadius = 25;
wzd.tiefe = 26;
wzd.zielachse = 17;
wzd.zog = 7;
wzd.elemente = 1;
wzd.typ = QStringLiteral("PERS");
wzd.subTyp = QStringLiteral("APERS");
}
void GenerateTelegrams::generateWirkmittelFeuerkommando_Gmlrs(QVector<AdlerJson::WirkmittelFeuerkommandoRakete> &wfrs)
{
AdlerJson::Treffpunkt treffpunkt;
treffpunkt.anzahl = 1;
treffpunkt.koordinate.koordinate.latitude = 5.5;
treffpunkt.koordinate.koordinate.longitude = 6.6;
treffpunkt.koordinate.hoehe = 7;
AdlerJson::WirkmittelFeuerkommandoRakete wfr;
wfr.kenner = ProjectDataManagement::L27_EffectorId::B1;
wfr.treffpunkte.append(treffpunkt);
wfr.flugzeit = 456.3;
wfr.gipfelhoehe = 300;
wfr.schussrichtung = 30.0;
wfr.fallwinkel = 5;
wfr.anflug = ProjectDataManagement::L48_TrajectoryRocket::Nominal;
wfr.gps = ProjectDataManagement::L46_GpsFrequency::L1;
wfr.wirkzeit = 55;
wfrs.append(wfr);
}
void GenerateTelegrams::generateEXFQBABBFK(AdlerJson::ExAwesPlanning &req)
{
AdlerJson::WirkfeldplanungData wfp;
wfp.feuerkampfReferenz = QStringLiteral("REF:%1").arg(QRandomGenerator::global()->bounded(1000000));
generateZieldaten(wfp.zieldaten);
wfp.abfeuerungsArt = AdlerJson::Abfeuerungsart::A;
wfp.forderung = ProjectDataManagement::L7_Request::VER;
wfp.dauer = 0;
AdlerJson::Feuerkommando fk;
{
fk.verein = QStringLiteral("AB7X");
fk.typ = ProjectDataManagement::L26_EffectingSystemType::RRohr;
QVector<AdlerJson::WirkmittelFeuerkommando> fkl;
{
AdlerJson::WirkmittelFeuerkommando wfk;
wfk.kenner = ProjectDataManagement::L27_EffectorId::B1;
AdlerJson::KoordinateMitHoehe ap;
ap.hoehe = 0;
AdlerJson::Koordinate kn;
kn.latitude = 53.0672;
kn.longitude = 8.86687;
ap.koordinate = kn;
wfk.auftreffpunkt = ap;
wfk.flugzeit = 30;
wfk.gipfelhoehe = 377;
wfk.schussrichtung = 177;
AdlerJson::FeuerkommandoGeschosse wfg;
{
wfg.geschosssorte = QStringLiteral("Spreng DM121");
wfg.ladung = QStringLiteral("M DM72");
wfg.zuender = QStringLiteral("Aufschlag BB DM371");
wfg.zuenderFunktion = QStringLiteral("AZoV");
wfg.zuenderZeit = 0;
wfg.anzahl = 7;
wfg.intervall = 1.0;
}
wfk.geschoss = wfg;
QVector<AdlerJson::Flugbahnpunkt> fpl;
{
AdlerJson::Flugbahnpunkt fp;
fp.zRelativ = 300;
fp.xRelativ = 200;
fp.yRelativ = 77;
fp.zeit = 17;
fpl.append(fp);
fp.zRelativ = 700;
fp.xRelativ = 900;
fp.yRelativ = 177;
fp.zeit = 19;
fpl.append(fp);
fp.zRelativ = 777;
fp.xRelativ = 977;
fp.yRelativ = 277;
fp.zeit = 33;
fpl.append(fp);
}
wfk.flugbahnpunkt = fpl;
AdlerJson::Streuungsdaten streuung;
streuung.seitenstreuungH = 0.7;
streuung.laengsstreuungH = 0.3;
streuung.seitenstreuung = 0.7;
streuung.laengsstreuung = 7.7;
wfk.streuung = streuung;
fkl.append(wfk);
}
fk.wirkmittel = fkl;
}
wfp.feuerkommando = fk;
generateWirkmittelFeuerkommando_Gmlrs(wfp.feuerkommando.wirkmittelRakete);
req.wirkfeldplanungData = wfp;
}
void GenerateTelegrams::generateEXFQBABBFK_Gmlrs(AdlerJson::ExAwesPlanning &req)
{
AdlerJson::WirkfeldplanungData wfp;
wfp.feuerkampfReferenz = QStringLiteral("REF:%1").arg(QRandomGenerator::global()->bounded(1000000));
wfp.zieldaten.nummer = 143;
wfp.abfeuerungsArt = AdlerJson::Abfeuerungsart::F;
wfp.dauer = 0;
AdlerJson::Feuerkommando fk;
{
fk.verein = QStringLiteral("AB13X");
fk.typ = ProjectDataManagement::L26_EffectingSystemType::Mars;
{
AdlerJson::WirkmittelFeuerkommandoRakete wfk;
wfk.kenner = ProjectDataManagement::L27_EffectorId::NO_211;
wfk.fallwinkel = 0;
wfk.anflug = ProjectDataManagement::L48_TrajectoryRocket::Nominal;
AdlerJson::Treffpunkt tp;
tp.anzahl = 1;
tp.koordinate.hoehe = 99;
tp.koordinate.koordinate.latitude = 53.0214;
tp.koordinate.koordinate.longitude = 8.9886;
wfk.treffpunkte.append(tp);
tp.koordinate.koordinate.latitude = 53.0207;
tp.koordinate.koordinate.longitude = 8.98852;
wfk.treffpunkte.append(tp);
tp.koordinate.koordinate.latitude = 53.0189;
tp.koordinate.koordinate.longitude = 8.98855;
wfk.treffpunkte.append(tp);
tp.koordinate.koordinate.latitude = 53.0196;
tp.koordinate.koordinate.longitude = 8.98712;
wfk.treffpunkte.append(tp);
tp.koordinate.koordinate.latitude = 53.0201;
tp.koordinate.koordinate.longitude = 8.99008;
tp.anzahl = 2;
wfk.treffpunkte.append(tp);
wfk.flugzeit = 66.03185272216797;
wfk.gipfelhoehe = 0;
wfk.schussrichtung = 3134.477668706035;
wfk.gps = ProjectDataManagement::L46_GpsFrequency::L1;
wfk.wirkzeit = 0;
AdlerJson::FeuerkommandoGeschosse wfg;
wfg.anzahl = 6;
wfg.geschosssorte = QStringLiteral("Unitary M31");
wfg.intervall = 5.0;
wfg.zuenderFunktion = QStringLiteral("AZoV");
wfg.zuenderZeit = 29;
wfk.geschoss = wfg;
fk.wirkmittelRakete.append(wfk);
}
}
wfp.feuerkommando = fk;
req.wirkfeldplanungData = wfp;
}
void GenerateTelegrams::generateEXFQBABBFK_Dm72(AdlerJson::ExAwesPlanning &req)
{
AdlerJson::WirkfeldplanungData wfp;
wfp.feuerkampfReferenz = QStringLiteral("REF:%1").arg(QRandomGenerator::global()->bounded(1000000));
wfp.zieldaten.nummer = 143;
wfp.abfeuerungsArt = AdlerJson::Abfeuerungsart::B;
wfp.dauer = 0;
AdlerJson::Feuerkommando fk;
{
fk.verein = QStringLiteral("AB72X");
fk.typ = ProjectDataManagement::L26_EffectingSystemType::Mars;
{
AdlerJson::WirkmittelFeuerkommandoRakete wfk;
wfk.kenner = ProjectDataManagement::L27_EffectorId::NO_212;
wfk.fallwinkel = 605;
AdlerJson::Treffpunkt tp;
tp.anzahl = 6;
tp.koordinate.hoehe = 99;
tp.koordinate.koordinate.latitude = 53.0279;
tp.koordinate.koordinate.longitude = 8.73684;
wfk.treffpunkte.append(tp);
wfk.flugzeit = 66.03185272216797;
wfk.gipfelhoehe = 0;
wfk.schussrichtung = 0.0;
wfk.wirkzeit = 3;
AdlerJson::FeuerkommandoGeschosse wfg;
wfg.anzahl = 6;
wfg.geschosssorte = QStringLiteral("Mine DM72");
wfg.intervall = 5.0;
wfg.zuenderZeit = 49;
wfk.geschoss = wfg;
fk.wirkmittelRakete.append(wfk);
}
}
wfp.feuerkommando = fk;
req.wirkfeldplanungData = wfp;
}
void GenerateTelegrams::generateFeuerbereit(AdlerJson::ExFeuerbereit &req)
{
req.feuerkampfdaten.feuerkampfReferenz = QStringLiteral("feuerkampfReferenz 1");
req.feuerkampfdaten.verein = QStringLiteral("AB7X");
req.feuerkampfdaten.kenner = ProjectDataManagement::L27_EffectorId::B1;
}
void GenerateTelegrams::generateFeuern(AdlerJson::ExFeuern &req)
{
req.feuerkampfdaten.feuerkampfReferenz = QStringLiteral("feuerkampfReferenz 1");
req.feuerkampfdaten.verein = QStringLiteral("AB7X");
req.feuerkampfdaten.kenner = ProjectDataManagement::L27_EffectorId::B1;
}
void GenerateTelegrams::generateFeuern_Gmlrs(AdlerJson::ExFeuern &req)
{
req.feuerkampfdaten.feuerkampfReferenz = QStringLiteral("feuerkampfReferenz 1");
req.feuerkampfdaten.verein = QStringLiteral("AB13X");
req.feuerkampfdaten.kenner = ProjectDataManagement::L27_EffectorId::NO_211;
}
void GenerateTelegrams::generateFeuern_Dm72(AdlerJson::ExFeuern &req)
{
req.feuerkampfdaten.feuerkampfReferenz = QStringLiteral("feuerkampfReferenz 1");
req.feuerkampfdaten.verein = QStringLiteral("AB72X");
req.feuerkampfdaten.kenner = ProjectDataManagement::L27_EffectorId::NO_212;
}
void GenerateTelegrams::generateNichtFeuern(AdlerJson::exNichtFeuern &req)
{
req.feuerkampfdaten.feuerkampfReferenz = QStringLiteral("feuerkampfReferenz 1");
req.feuerkampfdaten.verein = QStringLiteral("AB7X");
req.feuerkampfdaten.kenner = ProjectDataManagement::L27_EffectorId::B1;
}
void GenerateTelegrams::generateAbgefeuert(AdlerJson::ExAbgefeuert &req)
{
req.feuerkampfdaten.feuerkampfReferenz = QStringLiteral("feuerkampfReferenz 1");
req.feuerkampfdaten.verein = QStringLiteral("AB7X");
req.feuerkampfdaten.kenner = ProjectDataManagement::L27_EffectorId::B1;
}
void GenerateTelegrams::generateVollzugsmeldung(AdlerJson::ExVollzugsmeldung &req)
{
req.feuerkampfdaten.feuerkampfReferenz = QStringLiteral("feuerkampfReferenz 1");
req.feuerkampfdaten.verein = QStringLiteral("AB7X");
req.feuerkampfdaten.kenner = ProjectDataManagement::L27_EffectorId::B1;
}
void GenerateTelegrams::generateAbmeldung(AdlerJson::EXDeregistration &req) { req.partyId = 2; }
void GenerateTelegrams::generateErkundungsergebnisse(AdlerJson::ExErkundungsergebnisse &req)
{
AdlerJson::Erkundungseinheit einheit;
AdlerJson::KoordinateMitHoehe ladeplatz;
AdlerJson::Erkundungsstellungen stellungen;
AdlerJson::Wirkungsbereich wirkungsbereich;
einheit.r = 5;
einheit.verein = QStringLiteral("verein Erkundungsdaten");
ladeplatz.hoehe = 55;
ladeplatz.koordinate.latitude = 53.37790;
ladeplatz.koordinate.longitude = 8.758;
AdlerJson::KoordinateMitHoehe waffenplatz1;
AdlerJson::KoordinateMitHoehe waffenplatz2;
waffenplatz1.hoehe = 56;
waffenplatz1.koordinate.latitude = 53.37791;
waffenplatz1.koordinate.longitude = 8.759;
waffenplatz2.hoehe = 57;
waffenplatz2.koordinate.latitude = 53.37792;
waffenplatz2.koordinate.longitude = 8.760;
stellungen.waffenplaetze.append(waffenplatz1);
stellungen.waffenplaetze.append(waffenplatz2);
wirkungsbereich.grundrichtung = 33;
wirkungsbereich.links = 44;
wirkungsbereich.rechts = 55;
stellungen.wirkungsbereich = wirkungsbereich;
req.erkundungsdaten.einheit = einheit;
req.erkundungsdaten.ladeplatz = ladeplatz;
req.erkundungsdaten.stellungen = stellungen;
}
void GenerateTelegrams::generateFeuerkampf(AdlerJson::ExFeuerkampf &req)
{
AdlerJson::KoordinateMitHoehe auftreffpunkt;
auftreffpunkt.hoehe = 56;
auftreffpunkt.koordinate.latitude = 53.37791;
auftreffpunkt.koordinate.longitude = 8.759;
AdlerJson::FeuerkommandoGeschosse geschoss;
geschoss.geschosssorte = QStringLiteral("Spreng DM121");
geschoss.ladung = QStringLiteral("M DM72");
geschoss.zuender = QString::number(4);
geschoss.zuenderFunktion = QString::number(2);
geschoss.zuenderZeit = 0;
geschoss.anzahl = 1;
geschoss.intervall = 1.0;
QVector<AdlerJson::Flugbahnpunkt> fpl;
{
AdlerJson::Flugbahnpunkt fp;
fp.zRelativ = 300;
fp.xRelativ = 200;
fp.yRelativ = 77;
fp.zeit = 17;
fpl.append(fp);
fp.zRelativ = 700;
fp.xRelativ = 900;
fp.yRelativ = 177;
fp.zeit = 19;
fpl.append(fp);
}
AdlerJson::WirkmittelFeuerkommando wirkmittelFeuerkommando;
wirkmittelFeuerkommando.kenner = ProjectDataManagement::L27_EffectorId::C2;
wirkmittelFeuerkommando.auftreffpunkt = auftreffpunkt;
wirkmittelFeuerkommando.flugzeit = 77;
wirkmittelFeuerkommando.gipfelhoehe = 78;
wirkmittelFeuerkommando.schussrichtung = 79;
wirkmittelFeuerkommando.geschoss = geschoss;
wirkmittelFeuerkommando.flugbahnpunkt = fpl;
AdlerJson::Feuerkommando feuerkommando;
feuerkommando.verein = QStringLiteral("verein Feuerkommando");
feuerkommando.wirkmittel.append(wirkmittelFeuerkommando);
AdlerJson::Zielmeldedaten zielmeldedaten;
generateZieldaten(zielmeldedaten.zieldaten);
zielmeldedaten.abfeuerungsArt = AdlerJson::Abfeuerungsart::F;
zielmeldedaten.forderung = ProjectDataManagement::L7_Request::BEL;
zielmeldedaten.dauer = 88;
zielmeldedaten.feuerkommandos.append(feuerkommando);
req.zielmeldedaten = zielmeldedaten;
}
void GenerateTelegrams::generateFeuerhalt(AdlerJson::ExFeuerhalt &req)
{
req.feuerHaltDaten.verein = QStringLiteral("123456");
req.feuerHaltDaten.kenner = ProjectDataManagement::L27_EffectorId::A;
req.feuerHaltDaten.kategorie = ProjectDataManagement::L22_FireHaltCategory::L22_FireHaltCategory_R;
req.feuerHaltDaten.feuerkampfReferenz = QStringLiteral("feuerHaltDaten");
req.feuerHaltDaten.zpNummer = 5;
req.feuerHaltDaten.koordinate.latitude = 53.11172;
req.feuerHaltDaten.koordinate.longitude = 8.86687;
req.feuerHaltDaten.radius = 50;
req.feuerHaltDaten.entladenSchuss = true;
}
void GenerateTelegrams::generateStellungsmeldungFS(AdlerJson::ExFeuerstellungFS &req)
{
req.feuerstellungsdaten.typ = ProjectDataManagement::L26_EffectingSystemType::RRohr;
req.feuerstellungsdaten.status = ProjectDataManagement::L28_Status::Einsatzbereit;
req.feuerstellungsdaten.feuereinheit.verein = QStringLiteral("verein ExFeuerstellungFS");
req.feuerstellungsdaten.feuereinheit.r = 5;
req.feuerstellungsdaten.feuereinheit.oi = ProjectDataManagement::L19_Oi::L19_Oi_F3;
req.feuerstellungsdaten.mittelpunkt.koordinate.latitude = 53.37791;
req.feuerstellungsdaten.mittelpunkt.koordinate.longitude = 8.759;
req.feuerstellungsdaten.mittelpunkt.hoehe = 20;
AdlerJson::KoordinateMitHoehe koordinate1;
AdlerJson::KoordinateMitHoehe koordinate2;
koordinate1.hoehe = 22;
koordinate1.koordinate.latitude = 53.37792;
koordinate1.koordinate.longitude = 8.760;
koordinate2.hoehe = 23;
koordinate2.koordinate.latitude = 53.37793;
koordinate2.koordinate.longitude = 8.761;
req.feuerstellungsdaten.koordinaten.append(koordinate1);
req.feuerstellungsdaten.koordinaten.append(koordinate2);
AdlerJson::Geschoss geschoss1;
AdlerJson::Geschoss geschoss2;
geschoss1.geschosssorte = QStringLiteral("Mine DM72");
geschoss1.ladung = QStringLiteral("M DM72");
geschoss1.zuender = QString::number(11);
geschoss1.anzahl = 6;
geschoss2.geschosssorte = QStringLiteral("Leucht DM116");
geschoss2.ladung = QStringLiteral("B L8A1");
geschoss2.zuender = QString::number(3);
geschoss2.anzahl = 7;
req.feuerstellungsdaten.geschosse.append(geschoss1);
req.feuerstellungsdaten.geschosse.append(geschoss2);
}
void GenerateTelegrams::generateStellungsmeldungWS(AdlerJson::ExFeuerstellungWS &req)
{
req.waffensystemdaten.typ = ProjectDataManagement::L26_EffectingSystemType::RRohr;
req.waffensystemdaten.kenner = ProjectDataManagement::L27_EffectorId::B1;
req.waffensystemdaten.status = ProjectDataManagement::L28_Status::Einsatzbereit;
req.waffensystemdaten.einheit.verein = QStringLiteral("AB7X");
req.waffensystemdaten.einheit.r = 6;
req.waffensystemdaten.einheit.oi = ProjectDataManagement::L19_Oi::L19_Oi_F6;
AdlerJson::Geschoss geschoss1;
AdlerJson::Geschoss geschoss2;
geschoss1.geschosssorte = QStringLiteral("Mine DM72");
geschoss1.ladung = QStringLiteral("M DM72");
geschoss1.zuender = QStringLiteral("Doppel DM183");
geschoss1.anzahl = 6;
geschoss2.geschosssorte = QStringLiteral("Leucht DM116");
geschoss2.ladung = QStringLiteral("B L8A1");
geschoss2.zuender = QStringLiteral("Aufschlag BB DM371");
geschoss2.anzahl = 7;
req.waffensystemdaten.geschosse.append(geschoss1);
req.waffensystemdaten.geschosse.append(geschoss2);
req.waffensystemdaten.koordinate.koordinate.latitude = 53.088354;
req.waffensystemdaten.koordinate.koordinate.longitude = 8.853092;
req.waffensystemdaten.koordinate.hoehe = 20;
req.waffensystemdaten.wirkungsbereich.grundrichtung = 1;
req.waffensystemdaten.wirkungsbereich.links = 2;
req.waffensystemdaten.wirkungsbereich.rechts = 3;
}
void GenerateTelegrams::generateStellungsmeldungWS_Gmlrs(AdlerJson::ExFeuerstellungWS &req)
{
req.waffensystemdaten.typ = ProjectDataManagement::L26_EffectingSystemType::Mars;
req.waffensystemdaten.kenner = ProjectDataManagement::L27_EffectorId::NO_211;
req.waffensystemdaten.status = ProjectDataManagement::L28_Status::NichtEinsatzbereit;
req.waffensystemdaten.einheit.verein = QStringLiteral("AB13X");
req.waffensystemdaten.einheit.r = 6;
req.waffensystemdaten.einheit.oi = ProjectDataManagement::L19_Oi::L19_Oi_F6;
AdlerJson::Geschoss geschoss1;
AdlerJson::Geschoss geschoss2;
geschoss1.geschosssorte = QStringLiteral("GMLRS Unitary M31");
geschoss1.ladung = QStringLiteral("Default");
geschoss1.zuender = QStringLiteral("Default");
geschoss1.anzahl = 6;
geschoss2.geschosssorte = QStringLiteral("GMLRS Unitary M31");
geschoss2.ladung = QStringLiteral("Default");
geschoss2.zuender = QStringLiteral("Default");
geschoss2.anzahl = 6;
req.waffensystemdaten.geschosse.append(geschoss1);
req.waffensystemdaten.geschosse.append(geschoss2);
req.waffensystemdaten.koordinate.koordinate.latitude = 53.088354;
req.waffensystemdaten.koordinate.koordinate.longitude = 8.853092;
req.waffensystemdaten.koordinate.hoehe = 20;
req.waffensystemdaten.wirkungsbereich.grundrichtung = 1;
req.waffensystemdaten.wirkungsbereich.links = 2;
req.waffensystemdaten.wirkungsbereich.rechts = 3;
}
void GenerateTelegrams::generateStellungsmeldungWS_Dm72(AdlerJson::ExFeuerstellungWS &req)
{
req.waffensystemdaten.typ = ProjectDataManagement::L26_EffectingSystemType::Mars;
req.waffensystemdaten.kenner = ProjectDataManagement::L27_EffectorId::NO_212;
req.waffensystemdaten.status = ProjectDataManagement::L28_Status::NichtEinsatzbereit;
req.waffensystemdaten.einheit.verein = QStringLiteral("AB72X");
req.waffensystemdaten.einheit.r = 1;
req.waffensystemdaten.einheit.oi = ProjectDataManagement::L19_Oi::L19_Oi_F1;
AdlerJson::Geschoss geschoss1;
AdlerJson::Geschoss geschoss2;
geschoss1.geschosssorte = QStringLiteral("Mine DM72");
geschoss1.ladung = QStringLiteral("Default");
geschoss1.zuender = QStringLiteral("Default");
geschoss1.anzahl = 6;
geschoss2.geschosssorte = QStringLiteral("Mine DM72");
geschoss2.ladung = QStringLiteral("Default");
geschoss2.zuender = QStringLiteral("Default");
geschoss2.anzahl = 6;
req.waffensystemdaten.geschosse.append(geschoss1);
req.waffensystemdaten.geschosse.append(geschoss2);
req.waffensystemdaten.koordinate.koordinate.latitude = 53.0737;
req.waffensystemdaten.koordinate.koordinate.longitude = 8.89542;
req.waffensystemdaten.koordinate.hoehe = 20;
req.waffensystemdaten.wirkungsbereich.grundrichtung = 1;
req.waffensystemdaten.wirkungsbereich.links = 2;
req.waffensystemdaten.wirkungsbereich.rechts = 3;
}
void GenerateTelegrams::generateStellungsmeldungLP(AdlerJson::ExFeuerstellungLP &req)
{
req.ladeplatzdaten.einheit.r = 5;
req.ladeplatzdaten.einheit.verein = QStringLiteral("verein StellungsmeldungLP");
req.ladeplatzdaten.einheit.oi = ProjectDataManagement::L19_Oi::L19_Oi_F3;
req.ladeplatzdaten.koordinate.koordinate.latitude = 53.37791;
req.ladeplatzdaten.koordinate.koordinate.longitude = 8.759;
req.ladeplatzdaten.koordinate.hoehe = 20;
AdlerJson::Geschoss geschoss1;
AdlerJson::Geschoss geschoss2;
geschoss1.geschosssorte = QStringLiteral("Mine DM72");
geschoss1.ladung = QStringLiteral("M DM72");
geschoss1.zuender = QStringLiteral("Doppel DM183");
geschoss1.anzahl = 6;
geschoss2.geschosssorte = QStringLiteral("Leucht DM116");
geschoss2.ladung = QStringLiteral("B L8A1");
geschoss2.zuender = QStringLiteral("Aufschlag_BB_DM371");
geschoss2.anzahl = 7;
req.ladeplatzdaten.geschosse.append(geschoss1);
req.ladeplatzdaten.geschosse.append(geschoss2);
}
void GenerateTelegrams::generateStellungswechsel(AdlerJson::ExStellungswechsel &req)
{
req.stellungswechseldaten.oi = ProjectDataManagement::L19_Oi::L19_Oi_F3;
req.stellungswechseldaten.r = 5;
req.stellungswechseldaten.verein = QStringLiteral("verein ExStellungswechsel");
}
void GenerateTelegrams::generateZeit1(AdlerJson::Zeitangabe_DTG &zeit)
{
zeit.stunden = 5;
zeit.minuten = 35;
zeit.sekunden = 55;
zeit.tag = 12;
zeit.monat = 11;
zeit.jahr = 2025;
zeit.ZVz = QStringLiteral("ZVz");
zeit.ZDS = QStringLiteral("ZDS");
zeit.ZDM = QStringLiteral("ZDM");
}
void GenerateTelegrams::generateZeit2(AdlerJson::Zeitangabe_DTG &zeit)
{
zeit.stunden = 5;
zeit.minuten = 35;
zeit.sekunden = 55;
zeit.tag = 13;
zeit.monat = 11;
zeit.jahr = 2025;
zeit.ZVz = QStringLiteral("ZVz");
zeit.ZDS = QStringLiteral("ZDS");
zeit.ZDM = QStringLiteral("ZDM");
}
void GenerateTelegrams::generateKoordinierungsmassnahmen(AdlerJson::ExHqKoordinierungsmassnahmen &req)
{
req.koordinierungsdaten.art = ProjectDataManagement::L25_KindGuidingLine::NFA;
req.koordinierungsdaten.name = QStringLiteral("Name ExHqKoordinierungsmassnahme");
req.koordinierungsdaten.truppenteil = QStringLiteral("Truppenteil ExHqKoordinierungsmassnahme");
generateZeit1(req.koordinierungsdaten.ab);
generateZeit2(req.koordinierungsdaten.bis);
AdlerJson::Koordinate koordinate1;
AdlerJson::Koordinate koordinate2;
koordinate1.latitude = 53.37792;
koordinate1.longitude = 8.760;
koordinate2.latitude = 53.37793;
koordinate2.longitude = 8.761;
req.koordinierungsdaten.koordinaten.append(koordinate1);
req.koordinierungsdaten.koordinaten.append(koordinate2);
req.koordinierungsdaten.mittelpunkt.latitude = 53.37794;
req.koordinierungsdaten.mittelpunkt.longitude = 8.762;
req.koordinierungsdaten.radius = 66;
req.koordinierungsdaten.maxGipfel = 123;
}
void GenerateTelegrams::generateKoordinierungsmassnahmen_EX_L25(AdlerJson::ExHqKoordinierungsmassnahmen &req,
ProjectDataManagement::L25_KindGuidingLine kind,
int i)
{
req.koordinierungsdaten.art = kind;
req.koordinierungsdaten.meldungsnummer = i;
req.koordinierungsdaten.name = QStringLiteral("Name ExHqKoordinierungsmassnahme");
req.koordinierungsdaten.truppenteil = QStringLiteral("Truppenteil ExHqKoordinierungsmassnahme");
generateZeit1(req.koordinierungsdaten.ab);
generateZeit2(req.koordinierungsdaten.bis);
AdlerJson::Koordinate koordinate1;
AdlerJson::Koordinate koordinate2;
AdlerJson::Koordinate koordinate3;
koordinate1.latitude = 52.49303888888889;
koordinate1.longitude = 11.53173888888889;
koordinate2.latitude = 52.49305277777784;
koordinate2.longitude = 11.53527777777777;
koordinate3.latitude = 52.49056944444446;
koordinate3.longitude = 11.53326388888889;
req.koordinierungsdaten.koordinaten.append(koordinate1);
req.koordinierungsdaten.koordinaten.append(koordinate2);
req.koordinierungsdaten.koordinaten.append(koordinate3);
req.koordinierungsdaten.mittelpunkt.latitude = 52.49222037;
req.koordinierungsdaten.mittelpunkt.longitude = 11.53342685;
req.koordinierungsdaten.radius = 66;
req.koordinierungsdaten.maxGipfel = 123;
}
void GenerateTelegrams::generateFuehrungslinien(AdlerJson::ExHqFuehrungslinien &req)
{
req.fuehrungsdaten.art = AdlerJson::Art_L24::AO;
req.fuehrungsdaten.name = QStringLiteral("Name EX-HQ(G) Führungslinien und Grenzen");
generateZeit1(req.fuehrungsdaten.ab);
generateZeit2(req.fuehrungsdaten.bis);
AdlerJson::Koordinate koordinate1;
AdlerJson::Koordinate koordinate2;
koordinate1.latitude = 53.37792;
koordinate1.longitude = 8.760;
koordinate2.latitude = 53.37793;
koordinate2.longitude = 8.761;
req.fuehrungsdaten.koordinaten.append(koordinate1);
req.fuehrungsdaten.koordinaten.append(koordinate2);
req.fuehrungsdaten.linkerNachbar = QStringLiteral("linker Nachbar");
req.fuehrungsdaten.rechterNachbar = QStringLiteral("rechter Nachbar");
}
void GenerateTelegrams::generateFuehrungslinien_EX_L24(AdlerJson::ExHqFuehrungslinien &req, AdlerJson::Art_L24 art24, int meldungsnummer)
{
req.fuehrungsdaten.koordinaten.clear();
req.fuehrungsdaten.art = art24;
req.fuehrungsdaten.name = QStringLiteral("Fuehrungslinie");
req.fuehrungsdaten.meldungsnummer = meldungsnummer;
generateZeit1(req.fuehrungsdaten.ab);
generateZeit2(req.fuehrungsdaten.bis);
AdlerJson::Koordinate koordinate1;
AdlerJson::Koordinate koordinate2;
AdlerJson::Koordinate koordinate3;
koordinate1.latitude = 52.49303888888889;
koordinate1.longitude = 11.53173888888889;
koordinate2.latitude = 52.49305277777784;
koordinate2.longitude = 11.53527777777777;
koordinate3.latitude = 52.49056944444446;
koordinate3.longitude = 11.53326388888889;
req.fuehrungsdaten.koordinaten.append(koordinate1);
req.fuehrungsdaten.koordinaten.append(koordinate2);
req.fuehrungsdaten.koordinaten.append(koordinate3);
req.fuehrungsdaten.linkerNachbar = QStringLiteral("linker Nachbar");
req.fuehrungsdaten.rechterNachbar = QStringLiteral("rechter Nachbar");
}
void GenerateTelegrams::generateTechnischeQuittung(AdlerJson::ExTqTechnischeQuittung &req)
{
req.technischeDaten.status = AdlerJson::Status_L32::INV;
req.technischeDaten.beschreibung = QStringLiteral("Beschreibung technischer Status");
}
void GenerateTelegrams::generateManuelleQuittung(AdlerJson::ExMqManuelleQuittung &req)
{
req.mqManuelleQuittungDaten.feuerkampfreferenz = QStringLiteral("Manuelle Quittung");
}
void GenerateTelegrams::generateFlugbahnberechnung(AdlerJson::ExFlugbahnberechnung &req)
{
req.flugbahnberechnungDaten.geschoss.geschosssorte = QStringLiteral("SMArt DM702");
req.flugbahnberechnungDaten.geschoss.ladung = QStringLiteral("M DM72");
req.flugbahnberechnungDaten.geschoss.zuender = QStringLiteral("Zeit DM52");
req.flugbahnberechnungDaten.geschoss.zuenderFunktion = QStringLiteral("ZZ");
req.flugbahnberechnungDaten.sprenghoehe = 0;
req.flugbahnberechnungDaten.standort.hoehe = 55;
req.flugbahnberechnungDaten.standort.koordinate.latitude = 53.37787;
req.flugbahnberechnungDaten.standort.koordinate.longitude = 8.7573;
req.flugbahnberechnungDaten.zielkoordinate.hoehe = 56;
req.flugbahnberechnungDaten.zielkoordinate.koordinate.latitude = 53.37788;
req.flugbahnberechnungDaten.zielkoordinate.koordinate.longitude = 8.7574;
req.flugbahnberechnungDaten.waffensystem = ProjectDataManagement::L26_EffectingSystemType::RRohr;
req.flugbahnberechnungDaten.winkelgruppe = AdlerJson::Winkelgruppe::Untere;
}
void GenerateTelegrams::generateFlugbahndaten(AdlerJson::ExFlugbahndaten &req)
{
req.flugbahndaten.fehlercode = AdlerJson::FlugbahnberechnungFehlercode::Ok;
req.flugbahndaten.zielkoordinate.hoehe = 56;
req.flugbahndaten.zielkoordinate.koordinate.latitude = 52.482048;
req.flugbahndaten.zielkoordinate.koordinate.longitude = 11.583;
req.flugbahndaten.waffensystem = ProjectDataManagement::L26_EffectingSystemType::RRohr;
req.flugbahndaten.flugzeit = 300;
req.flugbahndaten.gipfelhoehe = 200;
req.flugbahndaten.schussrichtung = 45;
req.flugbahndaten.fallwinkel = 55;
AdlerJson::Flugbahnpunkt flugbahnpunkt;
for (int i = 0; i < 30; ++i)
{
flugbahnpunkt.zeit += 1.0;
flugbahnpunkt.xRelativ += 100;
flugbahnpunkt.yRelativ += 200;
flugbahnpunkt.zRelativ += 10;
req.flugbahndaten.flugbahnpunkt.append(flugbahnpunkt);
}
for (int i = 0; i < 30; ++i)
{
flugbahnpunkt.zeit += 1.0;
flugbahnpunkt.xRelativ -= 100;
flugbahnpunkt.yRelativ -= 200;
flugbahnpunkt.zRelativ -= 10;
req.flugbahndaten.flugbahnpunkt.append(flugbahnpunkt);
}
req.flugbahndaten.streuung.laengsstreuung = 2.2;
req.flugbahndaten.streuung.seitenstreuung = 3.3;
req.flugbahndaten.streuung.laengsstreuungH = 4.4;
req.flugbahndaten.streuung.seitenstreuungH = 5.5;
req.flugbahndaten.geschoss.geschosssorte = QStringLiteral("Spreng DM121");
req.flugbahndaten.geschoss.ladung = QStringLiteral("M DM72");
req.flugbahndaten.geschoss.ladungsNummer = 5;
req.flugbahndaten.geschoss.zuender = QStringLiteral("Aufschlag DM241");
req.flugbahndaten.geschoss.zuenderFunktion = QStringLiteral("AZoV");
req.flugbahndaten.geschoss.zuenderZeit = 1000;
}
void GenerateTelegrams::generateFreitextmeldung(AdlerJson::ExAqFreitextmeldung &req) { req.freitextDaten.text = QStringLiteral("Freier Text"); }
@@ -0,0 +1,54 @@
#pragma once
#include "telegrams.h"
class GenerateTelegrams
{
public:
GenerateTelegrams();
static void SAATELEGRAMS_EXPORT addHeaderData(AdlerJson::EXTelegramBase &tele, const int saaId, const QString referenceUuid = QString{});
static void SAATELEGRAMS_EXPORT generateConnectResponseMessage(AdlerJson::ExAnmeldebestaetigung &exAnmeldebestaetigung);
static void SAATELEGRAMS_EXPORT generateConnectMessage(AdlerJson::EXRegistration &exRegistration, int partyId, bool isVerbund = true);
static void SAATELEGRAMS_EXPORT generateDisconnectMessage(AdlerJson::EXDeregistration &eXDeregistration, int partyId);
static void SAATELEGRAMS_EXPORT generateStatusMessage(AdlerJson::EXStatus &exStatus, AdlerJson::Szenarstatus status);
static void SAATELEGRAMS_EXPORT generateConnectionTestMessage();
static void SAATELEGRAMS_EXPORT generateAbmeldung(AdlerJson::EXDeregistration &req);
static void SAATELEGRAMS_EXPORT generateZeit1(AdlerJson::Zeitangabe_DTG &zeit);
static void SAATELEGRAMS_EXPORT generateZeit2(AdlerJson::Zeitangabe_DTG &zeit);
static void SAATELEGRAMS_EXPORT generateZieldaten(AdlerJson::Zieldaten &wzd);
static void SAATELEGRAMS_EXPORT generateWirkmittelFeuerkommando_Gmlrs(QVector<AdlerJson::WirkmittelFeuerkommandoRakete> &wfr);
static void SAATELEGRAMS_EXPORT generateEXFQBABBFK(AdlerJson::ExAwesPlanning &req);
static void SAATELEGRAMS_EXPORT generateEXFQBABBFK_Gmlrs(AdlerJson::ExAwesPlanning &req);
static void SAATELEGRAMS_EXPORT generateEXFQBABBFK_Dm72(AdlerJson::ExAwesPlanning &req);
static void SAATELEGRAMS_EXPORT generateFeuerbereit(AdlerJson::ExFeuerbereit &req);
static void SAATELEGRAMS_EXPORT generateFeuern(AdlerJson::ExFeuern &req);
static void SAATELEGRAMS_EXPORT generateFeuern_Gmlrs(AdlerJson::ExFeuern &req);
static void SAATELEGRAMS_EXPORT generateFeuern_Dm72(AdlerJson::ExFeuern &req);
static void SAATELEGRAMS_EXPORT generateNichtFeuern(AdlerJson::exNichtFeuern &req);
static void SAATELEGRAMS_EXPORT generateAbgefeuert(AdlerJson::ExAbgefeuert &req);
static void SAATELEGRAMS_EXPORT generateVollzugsmeldung(AdlerJson::ExVollzugsmeldung &req);
static void SAATELEGRAMS_EXPORT generateErkundungsergebnisse(AdlerJson::ExErkundungsergebnisse &req);
static void SAATELEGRAMS_EXPORT generateFeuerkampf(AdlerJson::ExFeuerkampf &req);
static void SAATELEGRAMS_EXPORT generateFeuerhalt(AdlerJson::ExFeuerhalt &req);
static void SAATELEGRAMS_EXPORT generateStellungsmeldungFS(AdlerJson::ExFeuerstellungFS &req);
static void SAATELEGRAMS_EXPORT generateStellungsmeldungWS(AdlerJson::ExFeuerstellungWS &req);
static void SAATELEGRAMS_EXPORT generateStellungsmeldungWS_Gmlrs(AdlerJson::ExFeuerstellungWS &req);
static void SAATELEGRAMS_EXPORT generateStellungsmeldungWS_Dm72(AdlerJson::ExFeuerstellungWS &req);
static void SAATELEGRAMS_EXPORT generateStellungsmeldungLP(AdlerJson::ExFeuerstellungLP &req);
static void SAATELEGRAMS_EXPORT generateStellungswechsel(AdlerJson::ExStellungswechsel &req);
static void SAATELEGRAMS_EXPORT generateKoordinierungsmassnahmen(AdlerJson::ExHqKoordinierungsmassnahmen &req);
static void SAATELEGRAMS_EXPORT generateKoordinierungsmassnahmen_EX_L25(AdlerJson::ExHqKoordinierungsmassnahmen &req,
ProjectDataManagement::L25_KindGuidingLine kind, int i);
static void SAATELEGRAMS_EXPORT generateFuehrungslinien(AdlerJson::ExHqFuehrungslinien &req);
static void SAATELEGRAMS_EXPORT generateFuehrungslinien_EX_L24(AdlerJson::ExHqFuehrungslinien &req, AdlerJson::Art_L24 art24, int meldungsnummer);
static void SAATELEGRAMS_EXPORT generateTechnischeQuittung(AdlerJson::ExTqTechnischeQuittung &req);
static void SAATELEGRAMS_EXPORT generateFreitextmeldung(AdlerJson::ExAqFreitextmeldung &req);
static void SAATELEGRAMS_EXPORT generateManuelleQuittung(AdlerJson::ExMqManuelleQuittung &req);
static void SAATELEGRAMS_EXPORT generateFlugbahnberechnung(AdlerJson::ExFlugbahnberechnung &req);
static void SAATELEGRAMS_EXPORT generateFlugbahndaten(AdlerJson::ExFlugbahndaten &req);
};
@@ -0,0 +1,6 @@
#include "interface_controller.h"
InterfaceController::InterfaceController()
{
}
Loaded 100 of 343 files, more files were not shown because too many files have changed in this diff. Show more