Initial commit

This commit is contained in:
torsten committed 2026-08-13 18:33:10 +02:00
commit b7d90b9afe
16245 files changed
+3396666

No files matched your search

@@ -0,0 +1,267 @@
/**
* AES Function Topic Client test executable
* $Id$
* $HeadURL$
* $Author$
*/
#include "aes_convert_mine_area.h"
#include <QTimer>
#include <QLineF>
#include <nglapplication/nglcoreapplication.h>
#include <LtsCommandLineParser/LtsCommandLineParser.h>
#include <ngldb/dbtransaction.h>
#include <ngldb/nsqlquery.h>
#include <ngldb/dbconnection.h>
#include <ngldb/sql_query_janitor.h>
#include <QtSql/QSqlError>
#include <QVariant>
#include <AreaEffectSimulation/aes_db_structs.h>
#include <LtsCoordTrans/lts_coord_trans.h>
#include <nglsettings/nglsettings_connections.h>
#include <nglsettings/nglsettings_settings.h>
#include <ngltools/ngltools_filesystem.h>
namespace AreaEffectSimulation
{
ConvertMineArea::ConvertMineArea(QObject *parent)
: QObject(parent)
, m_query(nullptr)
, m_exerciseId(-1)
, m_bEmitMessageOnError(false)
, m_bCanHandleSchemas(true)
, m_ownDatabaseConnection(true)
, m_logger(getLogger(QStringLiteral("ConvertMineArea")))
{}
bool ConvertMineArea::init(int exerciseId)
{
m_exerciseId = exerciseId;
NGL::Settings *s = new NGL::Settings(NGL::findProjectConfigFile());
const QString dbUser(QStringLiteral("ets_exm"));
const QString dbPasswd(QStringLiteral("ets11de"));
const QString hostname(s->databaseHostname());
const QString driver(s->databaseDriver());
const QString dbname(s->databaseName());
bool ok = initDB(dbUser, dbPasswd, driver, hostname, dbname);
if (!ok)
{
ERROR_LOG(m_logger) << "Error opening db, exiting..";
return false;
}
ERROR_LOG(m_logger) << "Database open";
return true;
}
bool ConvertMineArea::initDB(const QString &dbUser,
const QString &dbPasswd,
const QString &dbDriver,
const QString &dbHost,
const QString &dbName)
{
m_ownDatabaseConnection = true;
m_dbConnection = DBConnection::open(m_logger, dbUser, dbPasswd, dbDriver, dbHost, dbName, schemaName());
return initDBInternal();
}
bool ConvertMineArea::initDBInternal()
{
QSqlDriver *driver = m_dbConnection.driver();
if (!driver)
{
WARNING_LOG(m_logger) << "No SQL driver loaded - no database available!";
return false;
}
const QString driverName = m_dbConnection.driverName();
DEBUG_LOG(m_logger) << "Connected to database " << m_dbConnection.databaseName() << "@" << m_dbConnection.hostName()
<< ", schema: " << schemaName() << ", used driver: " << driverName;
if (!m_dbConnection.isOpen())
{
WARNING_LOG(m_logger) << "Database connection is no open - can not initialize database interface";
return false;
}
if (driverName == QLatin1String("QSQLITE"))
m_bCanHandleSchemas = false;
m_query = new NSqlQuery(m_dbConnection, m_logger);
return true;
}
QString ConvertMineArea::schemaName() const
{
if (!m_bCanHandleSchemas)
return QString();
if (m_exerciseId <= 0)
return QStringLiteral("aes");
return DBCommon::getExerciseSchemaName(m_exerciseId);
}
QString ConvertMineArea::dbUser() const
{
if (m_exerciseId > 0)
return QStringLiteral("ets_ex_00");
else
return QStringLiteral("ets_") + schemaName();
}
//
// MineArea
//
QString ConvertMineArea::getTableName(const QString &tableName) const
{
if (!m_bCanHandleSchemas)
return tableName;
if (m_exerciseId > 0)
return DBCommon::getExerciseTableName(tableName, m_exerciseId);
return QStringLiteral("aes.") + tableName;
}
bool ConvertMineArea::tryConvertMineArea()
{
const QString tableName1(getTableName(QStringLiteral("aes_mine_area")));
const QString stmt1(QStringLiteral("SELECT id, density FROM ") + tableName1);
m_query->prepare(stmt1);
if (!m_query->exec(m_bEmitMessageOnError))
{
m_lastError = m_query->lastError();
return false;
}
QMap<int,double> densityMap;
while (m_query->next())
{
int i = 0;
int aesId = m_query->value(i++).toInt();
double density = m_query->value(i++).toInt();
densityMap.insert(aesId, density);
}
const QString tableName(getTableName(QStringLiteral("aes_mine_area_segment")));
const QString stmt(QStringLiteral("SELECT id, mine_area_id, element_number, start_position_x, start_position_y, rotation_angle, mine_count"
" FROM ") + tableName);
m_query->prepare(stmt);
if (!m_query->exec(m_bEmitMessageOnError))
{
m_lastError = m_query->lastError();
return false;
}
Database::AesMineAreaSegment data;
QVector<Database::AesMineAreaSegment> vecMineArea;
while (m_query->next())
{
int i = 0;
data.id = m_query->value(i++).toInt();
data.mineAreaId = m_query->value(i++).toInt();
data.elementNumber = m_query->value(i++).toInt();
data.startPosition.rx() = m_query->value(i++).toDouble();
data.startPosition.ry() = m_query->value(i++).toDouble();
double rotationAngle = m_query->value(i++).toDouble();
int mineCount = m_query->value(i++).toInt();
LtsCoordTrans::UtmCoordinate startPositionUtm = LtsCoordTrans::UtmCoordinate::fromGeographic(data.startPosition);
QLineF line;
line.setP1({startPositionUtm.x, startPositionUtm.y});
line.setLength(mineCount / densityMap.value(data.mineAreaId));
line.setAngle(rotationAngle);
QPointF p2 = line.p2();
LtsCoordTrans::UtmCoordinate endPositionUtm = startPositionUtm;
endPositionUtm.x = p2.x();
endPositionUtm.y = p2.y();
data.endPosition = endPositionUtm.geographic();
DEBUG_LOG(m_logger) << "aesId: " << data.mineAreaId << ", id: " << data.id;
DEBUG_LOG(m_logger) << "EndpositionUtm: x: " << endPositionUtm.x << ", y: " << endPositionUtm.y;
DEBUG_LOG(m_logger) << "Geographic: x: " << data.endPosition.x() << " y: " << data.endPosition.y();
vecMineArea.append(data);
}
const QString stmt3(QStringLiteral("UPDATE ") + tableName +
QStringLiteral(" SET"
" end_position_x = :end_position_x, end_position_y = :end_position_y"
" WHERE id = :id"));
if (!m_query->prepare(stmt3))
{
m_lastError = m_query->lastError();
ERROR_LOG(m_logger) << "lastError: " << m_lastError.text();
return false;
}
for ( const Database::AesMineAreaSegment &mineAreaSegment : vecMineArea)
{
m_query->bindValue(QStringLiteral(":end_position_x"), mineAreaSegment.endPosition.x());
m_query->bindValue(QStringLiteral(":end_position_y"), mineAreaSegment.endPosition.y());
m_query->bindValue(QStringLiteral(":id"), mineAreaSegment.id);
if (!m_query->exec(m_bEmitMessageOnError))
{
m_lastError = m_query->lastError();
ERROR_LOG(m_logger) << "lastError: " << m_lastError.text();
return false;
}
}
return true;
}
} // namespace AreaEffectSimulation
// ------------------------------------------------------------------
class CmdLineParser : public LtsCommandLineParser::LtsCommandLineParser
{
public:
CmdLineParser()
: LtsCommandLineParser()
{
}
int exerciseId() const { return isSet(QLatin1String("e")) ? value(QLatin1String("e")).toInt() : -1; }
};
// ------------------------------------------------------------------
int main(int argc, char **argv)
{
NGLCoreApplication app(argc, argv);
app.createLogger("ConvertMineArea", 0 );
CmdLineParser options;
if (!options.init())
return -1;
AreaEffectSimulation::ConvertMineArea convMa(nullptr);
if (!convMa.init(options.exerciseId()))
{
ERROR_LOG(app.baseLogger()) << "Initialisation failed.";
return -2;
}
if (convMa.tryConvertMineArea())
ERROR_LOG(app.baseLogger()) << "Conversion for Exercise " << options.exerciseId() << " successful!";
else
ERROR_LOG(app.baseLogger()) << "Conversion failed.";
}