refs #358, consolidated mapping and model classes

* removed redundant classes in blacksim
* more detailed attributes for mapping
* more finder functions in mapping list
* aircraft model extended as simulator independent description for models
This commit is contained in:
Klaus Basan
2014-12-15 00:26:19 +01:00
parent def17124db
commit bdcb031591
15 changed files with 269 additions and 504 deletions

View File

@@ -1,12 +1,17 @@
#include "blacksimfreefunctions.h"
/* Copyright (C) 2013
* swift Project Community / Contributors
*
* This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level
* directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project,
* including this file, may be copied, modified, propagated, or distributed except according to the terms
* contained in the LICENSE file.
*/
#include "blacksimfreefunctions.h"
#include "blacksim/simulatorinfolist.h"
#include "blacksim/setsimulator.h"
#include "fsx/simconnectutilities.h"
#include "fscommon/aircraftcfgentrieslist.h"
#include "fscommon/aircraftmappinglist.h"
namespace BlackSim
{
@@ -17,9 +22,7 @@ namespace BlackSim
BlackSim::CSimulatorInfoList::registerMetadata();
BlackSim::Settings::CSettingsSimulator::registerMetadata();
BlackSim::FsCommon::CAircraftCfgEntries::registerMetadata();
BlackSim::FsCommon::CAircraftMapping::registerMetadata();
BlackSim::FsCommon::CAircraftCfgEntriesList::registerMetadata();
BlackSim::FsCommon::CAircraftMappingList::registerMetadata();
BlackSim::Fsx::CSimConnectUtilities::registerMetadata();
}

View File

@@ -1,182 +0,0 @@
/* Copyright (C) 2013
* swift project Community / Contributors
*
* This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level
* directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project,
* including this file, may be copied, modified, propagated, or distributed except according to the terms
* contained in the LICENSE file.
*/
#include "aircraftmapping.h"
#include "blackmisc/blackmiscfreefunctions.h"
using namespace BlackMisc;
namespace BlackSim
{
namespace FsCommon
{
/*
* Constructor
*/
CAircraftMapping::CAircraftMapping() :
m_mappingId(CAircraftMapping::InvalidId), m_proposalId(CAircraftMapping::InvalidId),
m_lastChanged(-1), m_simulatorInfo(BlackSim::CSimulatorInfo::UnspecifiedSim()),
m_changed(false)
{
// void
}
/*
* Constructor
*/
CAircraftMapping::CAircraftMapping(
qint32 mappingId, qint32 proposalId, const QString &fsAircraftKey, const QString &icaoAircraftDesignator,
const QString &icaoAirline, const QString &icaoAircraftType, const QString &icaoWakeTurbulenceCategory, const QString &painting,
const QString &lastChanged, BlackSim::CSimulatorInfo simulator) :
m_mappingId(mappingId), m_proposalId(proposalId), m_fsAircraftKey(fsAircraftKey), m_aircraftDesignator(icaoAircraftDesignator),
m_airlineDesignator(icaoAirline), m_aircraftCombinedType(icaoAircraftType), m_wakeTurbulenceCategory(icaoWakeTurbulenceCategory), m_aircraftColor(painting),
m_lastChanged(lastChanged), m_simulatorInfo(simulator), m_changed(false)
{
// void
}
/*
* String for converter
*/
QString CAircraftMapping::convertToQString(bool i18n) const
{
QString s("{%1, %2, %3, %4, %5}");
s = s.arg(this->m_fsAircraftKey).
arg(this->m_mappingId).arg(this->m_proposalId).
arg(this->m_aircraftDesignator).arg(this->m_simulatorInfo.toQString(i18n));
return s;
}
/*
* Validate data
*/
QString CAircraftMapping::validate() const
{
QString msg;
if (this->m_fsAircraftKey.isEmpty())
msg.append("Missing sim key. ");
if (this->m_aircraftDesignator.isEmpty())
msg.append("Missing designator. ");
if (this->m_simulatorInfo.isUnspecified())
msg.append("Unknown simulator. ");
if (this->m_aircraftCombinedType.isEmpty())
msg.append("Missing type. ");
else if (this->m_aircraftCombinedType.length() != 3)
msg.append("Wrong type length (req.3). ");
if (this->m_wakeTurbulenceCategory.isEmpty() || this->m_wakeTurbulenceCategory.length() != 1)
msg.append("Invalid WTC. ");
else if (this->m_wakeTurbulenceCategory != "L" && this->m_wakeTurbulenceCategory != "M" && this->m_wakeTurbulenceCategory != "H")
msg.append("Invalid WTC code. ");
return msg.trimmed();
}
/*
* Last changed formatted
*/
QString CAircraftMapping::getLastChangedFormatted() const
{
QString ts = this->m_lastChanged;
QString f("%1-%2-%3 %4:%5:%6");
return f.arg(ts.left(4)).arg(ts.mid(4, 2)).arg(ts.mid(6, 2))
.arg(ts.mid(8, 2)).arg(ts.mid(10, 2)).arg(ts.right(2));
}
/*
* Hash
*/
uint CAircraftMapping::getValueHash() const
{
return qHash(TupleConverter<CAircraftMapping>::toTuple(*this));
}
/*
* Get column
*/
CVariant CAircraftMapping::propertyByIndex(const BlackMisc::CPropertyIndex &index) const
{
if (index.isMyself()) { return this->toCVariant(); }
ColumnIndex i = index.frontCasted<ColumnIndex>();
switch (i)
{
case IndexMappingId:
return CVariant::from(this->m_mappingId);
case IndexProposalId:
return CVariant::from(m_proposalId);
case IndexAircraftKey:
return CVariant::from(m_fsAircraftKey);
case IndexAircraftDesignator:
return CVariant::from(m_aircraftDesignator);
case IndexAirlineDesignator:
return CVariant::from(m_airlineDesignator);
case IndexAircraftCombinedType:
return CVariant::from(m_aircraftCombinedType);
case IndexWakeTurbulenceCategory:
return CVariant::from(m_wakeTurbulenceCategory);
case IndexAirlineColor:
return CVariant::from(this->m_aircraftColor);
case IndexLastChanged:
return CVariant::from(this->getLastChangedFormatted());
case IndexSimulatorInfo:
return this->m_simulatorInfo.propertyByIndex(index.copyFrontRemoved());
default:
return CValueObject::propertyByIndex(index);
}
}
/*
* Set column's value
*/
void CAircraftMapping::setPropertyByIndex(const CVariant &variant, const BlackMisc::CPropertyIndex &index)
{
if (index.isMyself())
{
this->convertFromCVariant(variant);
return;
}
ColumnIndex i = index.frontCasted<ColumnIndex>();
switch (i)
{
case IndexMappingId:
this->m_mappingId = variant.valueOrDefault<qint32>(CAircraftMapping::InvalidId);
break;
case IndexProposalId:
this->m_proposalId = variant.valueOrDefault<qint32>(CAircraftMapping::InvalidId);
break;
case IndexAircraftKey:
m_fsAircraftKey = variant.toQString();
break;
case IndexAircraftDesignator:
this->setAircraftDesignator(variant.toQString());
break;
case IndexAirlineDesignator:
this->setAirlineDesignator(variant.toQString());
break;
case IndexAircraftCombinedType:
this->setAircraftCombinedType(variant.toQString());
break;
case IndexWakeTurbulenceCategory:
this->setWakeTurbulenceCategory(variant.toQString());
break;
case IndexAirlineColor:
this->m_aircraftColor = variant.toQString();
break;
default:
CValueObject::setPropertyByIndex(variant, index);
break;
}
}
} // namespace
} // namespace

View File

@@ -1,183 +0,0 @@
/* Copyright (C) 2013
* swift project Community / Contributors
*
* This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level
* directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project,
* including this file, may be copied, modified, propagated, or distributed except according to the terms
* contained in the LICENSE file.
*/
//! \file
#ifndef BLACKSIM_FSCOMMON_AIRCRAFTMAPPING_H
#define BLACKSIM_FSCOMMON_AIRCRAFTMAPPING_H
#include "aircraftcfgentries.h"
#include "blacksim/simulatorinfo.h"
#include "blackmisc/valueobject.h"
#include <QDateTime>
namespace BlackSim
{
namespace FsCommon
{
//! Aircraft mapping class, represents one particular mapping
class CAircraftMapping : public BlackMisc::CValueObjectStdTuple<CAircraftMapping>
{
public:
static const qint32 InvalidId = -1; //!< Invalid mapping id
//! Columns
enum ColumnIndex
{
IndexMappingId = BlackMisc::CPropertyIndex::GlobalIndexCAircraftMapping,
IndexProposalId,
IndexAircraftKey,
IndexAircraftDesignator,
IndexAirlineDesignator,
IndexAircraftCombinedType,
IndexWakeTurbulenceCategory,
IndexAirlineColor,
IndexLastChanged,
IndexSimulatorInfo
};
//! Default mapping
CAircraftMapping();
/*!
* Complete constructor
* \param mappingId
* \param proposalId
* \param fsAircraftKey
* \param icaoAircraftDesignator
* \param icaoAirline
* \param icaoAircraftType
* \param icaoWakeTurbulenceCategory
* \param painting
* \param lastChanged
* \param simulator
*/
CAircraftMapping(qint32 mappingId, qint32 proposalId, const QString &fsAircraftKey, const QString &icaoAircraftDesignator, const QString &icaoAirline, const QString &icaoAircraftType, const QString &icaoWakeTurbulenceCategory, const QString &painting, const QString &lastChanged, CSimulatorInfo simulator);
//! Mapping id
qint32 getMappingId() const { return this->m_mappingId; }
//! Proposal id (if proposal, otherwise <0)
qint32 getProposalId() const { return this->m_proposalId; }
//! Aircraft key
QString getFsAircraftKey() const { return this->m_fsAircraftKey; }
//! ICAO designator (B737)
QString getAircraftDesignator() const { return this->m_aircraftDesignator; }
//! ICAO airline (DLH)
QString getAirlineDesignator() const { return this->m_airlineDesignator; }
//! ICAO aircraft type (L2J)
QString getAircraftCombinedType() const { return this->m_aircraftCombinedType; }
//! ICAO wake turbulence category (L,M,H)
QString getWakeTurbulenceCategory() const { return this->m_wakeTurbulenceCategory; }
//! Painting, basically the airline code for GA planes
QString getAircraftColor() const { return this->m_aircraftColor; }
//! Last changed timestamp YYYYMMDDhhmmss
QString getLastChanged() const { return this->m_lastChanged; }
//! Last changed timestamp YYYYMMDDhhmmss
QString getLastChangedFormatted() const;
//! Simulator
BlackSim::CSimulatorInfo getSimulatorInfo() const { return this->m_simulatorInfo; }
//! Simulator
QString getSimulatorText() const;
//! Valid data?
bool isValid() const
{
QString v = this->validate();
return v.isEmpty();
}
//! Validate and return error messages, empty string means all OK.
QString validate() const;
//! Set mapping id
void setMappingId(qint32 mappingId) { this->m_mappingId = mappingId; }
//! Proposal id
void setProposalId(qint32 proposalId) { this->m_proposalId = proposalId; }
//! Aircraft key
void setFsAircraftKey(const QString &aircraftKey) { this->m_fsAircraftKey = aircraftKey; }
//! ICAO designator (B737)
void setAircraftDesignator(const QString &icaoDesignator) { this->m_aircraftDesignator = icaoDesignator.toUpper(); }
//! ICAO airline (DLH)
void setAirlineDesignator(const QString &airline) { this->m_airlineDesignator = airline.toUpper(); }
//! ICAO aircraft type (L2J)
void setAircraftCombinedType(const QString &aircraftType) { this->m_aircraftCombinedType = aircraftType.toUpper(); }
//! ICAO wake turbulence category
void setWakeTurbulenceCategory(const QString &wtc) { this->m_wakeTurbulenceCategory = wtc.toUpper(); }
//! Painting, basically the airline code for GA planes
void setAircraftColor(const QString &painting) { this->m_aircraftColor = painting; }
//! Last changed timestamp YYYYMMDDhhmmss
void setLastChanged(qint32 lastChanged) { this->m_lastChanged = lastChanged; }
//! Simulator
void setSimulator(BlackSim::CSimulatorInfo simulator) { this->m_simulatorInfo = simulator; }
//! Set simulator text
void setSimulatorText(const QString &simulator);
//! \copydoc CValueObject::propertyByIndex
BlackMisc::CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const override;
//! \copydoc CValueObject::setPropertyByIndex()
void setPropertyByIndex(const BlackMisc::CVariant &value, const BlackMisc::CPropertyIndex &index) override;
//! \copydoc CValueObject::getValueHash()
virtual uint getValueHash() const override;
//! Current UTC timestamp
static QString currentUtcTimestamp()
{
QDateTime dateTime = QDateTime::currentDateTimeUtc();
QString dateTimeString = dateTime.toString("yyyyMMddhhmmss");
return dateTimeString;
}
protected:
//! \copydoc CValueObject::convertToQString
virtual QString convertToQString(bool i18n = false) const;
private:
BLACK_ENABLE_TUPLE_CONVERSION(CAircraftMapping)
qint32 m_mappingId; //!< Kind of primary key for this particular mapping
qint32 m_proposalId; //!< If proposal id of the proposal
QString m_fsAircraftKey; //!< Id by which the simulator can create the aircraft
QString m_aircraftDesignator; //!< Aircraft designator such as B737
QString m_airlineDesignator; //!< Airline designator such as DLH
QString m_aircraftCombinedType; //!< Engine, type, number of engines L2J, L1P
QString m_wakeTurbulenceCategory; //!< Wake turbulence category H, L, M
QString m_aircraftColor; //!< Aircrafts painting designator, could be same as airline or specific
QString m_lastChanged; //!< Simple timestamp as YYYYMMDDhhmmss
BlackSim::CSimulatorInfo m_simulatorInfo; //!< Mapping is for simulator
bool m_changed; //! Changed flag
};
} // namespace
} // namespace
BLACK_DECLARE_TUPLE_CONVERSION(BlackSim::FsCommon::CAircraftMapping, (o.m_mappingId, o.m_proposalId, o.m_fsAircraftKey, o.m_aircraftDesignator, o.m_airlineDesignator, o.m_aircraftCombinedType, o.m_wakeTurbulenceCategory, o.m_aircraftColor, o.m_lastChanged, o.m_simulatorInfo, o.m_changed))
Q_DECLARE_METATYPE(BlackSim::FsCommon::CAircraftMapping)
#endif // guard

View File

@@ -1,21 +0,0 @@
#include "aircraftmappinglist.h"
namespace BlackSim
{
namespace FsCommon
{
/*
* Register metadata
*/
void CAircraftMappingList::registerMetadata()
{
qRegisterMetaType<BlackMisc::CSequence<CAircraftMapping>>();
qDBusRegisterMetaType<BlackMisc::CSequence<CAircraftMapping>>();
qRegisterMetaType<BlackMisc::CCollection<CAircraftMapping>>();
qDBusRegisterMetaType<BlackMisc::CCollection<CAircraftMapping>>();
qRegisterMetaType<CAircraftMappingList>();
qDBusRegisterMetaType<CAircraftMappingList>();
BlackMisc::registerMetaValueType<CAircraftMappingList>();
}
}
} // namespace

View File

@@ -1,61 +0,0 @@
/* Copyright (C) 2013
* swift project Community / Contributors
*
* This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level
* directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project,
* including this file, may be copied, modified, propagated, or distributed except according to the terms
* contained in the LICENSE file.
*/
//! \file
#ifndef BLACKSIM_FSCOMMON_AIRCRAFTMAPPINGS_H
#define BLACKSIM_FSCOMMON_AIRCRAFTMAPPINGS_H
#include "aircraftmapping.h"
#include "aircraftcfgentrieslist.h"
#include "blackmisc/sequence.h"
#include <QTemporaryFile>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QXmlStreamReader>
namespace BlackSim
{
namespace FsCommon
{
//! Aircraft mappings
class CAircraftMappingList : public BlackMisc::CSequence<CAircraftMapping>
{
public:
//! Default constructor
CAircraftMappingList() {}
//! Virtual destructor
virtual ~CAircraftMappingList() {}
//! \copydoc CValueObject::toQVariant
virtual QVariant toQVariant() const override { return QVariant::fromValue(*this); }
//! \copydoc CValueObject::convertFromQVariant
virtual void convertFromQVariant(const QVariant &variant) override { BlackMisc::setFromQVariant(this, variant); }
//! Unknown mapping
static const CAircraftMapping &UnknownMapping()
{
static CAircraftMapping mapping;
return mapping;
}
//! Register metadata
static void registerMetadata();
};
}
}
Q_DECLARE_METATYPE(BlackSim::FsCommon::CAircraftMappingList)
Q_DECLARE_METATYPE(BlackMisc::CCollection<BlackSim::FsCommon::CAircraftMapping>)
Q_DECLARE_METATYPE(BlackMisc::CSequence<BlackSim::FsCommon::CAircraftMapping>)
#endif // guard