6 #include <QStringBuilder>
12 namespace swift::misc::simulation
18 this->
reset(algorithm);
33 else { m_algorithm =
static_cast<int>(algorithm); }
50 m.setFlag(ReverseLookupDefault);
56 return m_msReverseEnabled && !m_msReverseLookupFile.isEmpty();
61 return m_msMatchingEnabled && !m_msMatchingStageFile.isEmpty();
67 m.setFlag(ModelVerificationAtStartup, verify);
74 m.setFlag(ModelVerificationOnlyWarnError, only);
82 m.setFlag(ByAirlineGroupIfNoAirline, ifNoAirline);
83 m.setFlag(ByAirlineGroupSameAsAirline, sameAsAirline);
98 if (index.
isMyself()) {
return QVariant::fromValue(*
this); }
102 case IndexMatchingAlgorithm:
return QVariant::fromValue(m_algorithm);
103 case IndexMatchingMode:
return QVariant::fromValue(m_mode);
104 case IndexPickStrategy:
return QVariant::fromValue(m_strategy);
105 case IndexForceMode:
return QVariant::fromValue(m_force);
106 case IndexMsNetworkEntryFile:
return QVariant::fromValue(m_msReverseLookupFile);
107 case IndexMsMatchingStageFile:
return QVariant::fromValue(m_msMatchingStageFile);
108 case IndexMsNetworkEnabled:
return QVariant::fromValue(m_msReverseEnabled);
109 case IndexMsMatchingStageEnabled:
return QVariant::fromValue(m_msMatchingEnabled);
125 case IndexMatchingAlgorithm: m_algorithm = variant.toInt();
break;
126 case IndexMatchingMode: m_mode = variant.toInt();
break;
127 case IndexForceMode: m_force = variant.toInt();
break;
128 case IndexPickStrategy: m_strategy = variant.toInt();
break;
129 case IndexMsNetworkEntryFile: m_msReverseLookupFile = variant.toString();
break;
130 case IndexMsMatchingStageFile: m_msMatchingStageFile = variant.toString();
break;
131 case IndexMsNetworkEnabled: m_msReverseEnabled = variant.toBool();
break;
132 case IndexMsMatchingStageEnabled: m_msReverseEnabled = variant.toBool();
break;
140 this->
reset(MatchingStepwiseReducePlusScoreBased);
141 m_msReverseLookupFile.clear();
142 m_msMatchingStageFile.clear();
143 m_msReverseEnabled =
false;
144 m_msMatchingEnabled =
false;
149 m_algorithm =
static_cast<int>(algorithm);
150 MatchingMode mode = ModeNone;
153 case MatchingStepwiseReduce: mode = ModeDefaultReduce;
break;
154 case MatchingScoreBased: mode = ModeDefaultScore;
break;
155 case MatchingStepwiseReducePlusScoreBased:
156 default: mode = ModeDefaultReducePlusScore;
break;
158 mode |= ModeDefaultSet;
167 return mm.testFlag(ByCategoryGlider) || mm.testFlag(ByCategoryMilitary);
172 static const QString rs(
"reduce + score based");
173 static const QString s(
"score based");
174 static const QString r(
"stepwise reduce");
177 case MatchingStepwiseReduce:
return r;
178 case MatchingScoreBased:
return s;
179 case MatchingStepwiseReducePlusScoreBased:
187 static const QString ms(
"by model string");
188 static const QString icao(
"by ICAO");
189 static const QString icaoAircraft(
"by ICAO aircraft first");
190 static const QString icaoAirline(
"by ICAO airline first");
191 static const QString family(
"by family");
192 static const QString military(
"by military");
193 static const QString civilian(
"by civilian");
194 static const QString vtol(
"VTOL");
195 static const QString livery(
"by livery");
196 static const QString combined(
"by combined code");
197 static const QString noZeros(
"scoring, ignore zero scores");
198 static const QString preferColorLiveries(
"scoring, prefer color liveries");
199 static const QString exNoDb(
"excl.without DB data");
200 static const QString exExcl(
"excl.excluded");
201 static const QString removeFromModelSet(
"rem.from model set");
202 static const QString verification(
"Verify models at startup");
203 static const QString verificationWarn(
"Show only validation warnings/errors");
204 static const QString modelFailedAdded(
"Replace models failed to be added");
205 static const QString categoryGlider(
"glider categories");
206 static const QString categoryMilitary(
"military categories");
207 static const QString categorySmallAircraft(
"small aircraft categories");
208 static const QString revModelString(
"reverse model lookup");
209 static const QString revLiveryIds(
"reverse livery ids");
210 static const QString agSameAsAirline(
"group as airline");
211 static const QString agIfNoAirline(
"group if no airline");
215 case ReverseLookupModelString:
return revModelString;
216 case ReverseLookupSwiftLiveryIds:
return revLiveryIds;
219 case ByFamily:
return family;
220 case ByLivery:
return livery;
221 case ByCombinedType:
return combined;
222 case ByIcaoOrderAircraftFirst:
return icaoAircraft;
223 case ByIcaoOrderAirlineFirst:
return icaoAirline;
226 case ByVtol:
return vtol;
227 case ByCategoryGlider:
return categoryGlider;
228 case ByCategoryMilitary:
return categoryMilitary;
229 case ByCategorySmallAircraft:
return categorySmallAircraft;
232 case ExcludeNoDbData:
return exNoDb;
233 case ExcludeNoExcluded:
return exExcl;
234 case ModelSetRemoveFailedModel:
return removeFromModelSet;
235 case ModelVerificationAtStartup:
return verification;
236 case ByAirlineGroupIfNoAirline:
return agIfNoAirline;
237 case ByAirlineGroupSameAsAirline:
return agSameAsAirline;
238 case ModelVerificationOnlyWarnError:
return verificationWarn;
239 case ModelFailoverIfNoModelCanBeAdded:
return modelFailedAdded;
243 static const QString unknown(
"unknown");
250 if (mode.testFlag(ReverseLookupModelString)) { modes <<
modeFlagToString(ReverseLookupModelString); }
251 if (mode.testFlag(ReverseLookupSwiftLiveryIds)) { modes <<
modeFlagToString(ReverseLookupSwiftLiveryIds); }
254 if (mode.testFlag(ByIcaoOrderAircraftFirst)) { modes <<
modeFlagToString(ByIcaoOrderAircraftFirst); }
255 if (mode.testFlag(ByIcaoOrderAirlineFirst)) { modes <<
modeFlagToString(ByIcaoOrderAirlineFirst); }
258 if (mode.testFlag(ByCombinedType)) { modes <<
modeFlagToString(ByCombinedType); }
261 if (mode.testFlag(ByCategoryGlider)) { modes <<
modeFlagToString(ByCategoryGlider); }
262 if (mode.testFlag(ByCategoryMilitary)) { modes <<
modeFlagToString(ByCategoryMilitary); }
263 if (mode.testFlag(ByCategorySmallAircraft)) { modes <<
modeFlagToString(ByCategorySmallAircraft); }
267 if (mode.testFlag(ModelSetRemoveFailedModel)) { modes <<
modeFlagToString(ModelSetRemoveFailedModel); }
268 if (mode.testFlag(ModelVerificationAtStartup)) { modes <<
modeFlagToString(ModelVerificationAtStartup); }
269 if (mode.testFlag(ByAirlineGroupIfNoAirline)) { modes <<
modeFlagToString(ByAirlineGroupIfNoAirline); }
270 if (mode.testFlag(ByAirlineGroupSameAsAirline)) { modes <<
modeFlagToString(ByAirlineGroupSameAsAirline); }
271 if (mode.testFlag(ModelVerificationOnlyWarnError))
275 if (mode.testFlag(ModelFailoverIfNoModelCanBeAdded))
279 return modes.join(
", ");
284 static const QString t(
"type");
285 static const QString ec(
"engine count");
286 static const QString e(
"engine");
287 static const QString n(
"nothing");
291 case ForceType:
return t;
292 case ForceEnginecount:
return ec;
293 case ForceEngine:
return e;
302 if (force.testFlag(ForceNothing)) {
return QStringLiteral(
"nothing"); }
306 if (force.testFlag(ForceEnginecount)) { forces <<
forceFlagToString(ForceEnginecount); }
308 return forces.join(
", ");
313 static const QString f(
"first");
314 static const QString o(
"order");
315 static const QString r(
"random");
319 case PickFirst:
return f;
320 case PickByOrder:
return o;
321 case PickRandom:
return r;
325 static const QString unknown(
"unknown");
330 bool revModelString,
bool revLiveryIds,
bool byModelString,
bool byIcaoDataAircraft1st,
331 bool byIcaoDataAirline1st,
bool byFamily,
bool byLivery,
bool byCombinedType,
bool byMilitary,
bool byCivilian,
332 bool byVtol,
bool byGliderCategory,
bool byMilitaryCategory,
bool bySmallAircraftCategory,
333 bool scoreIgnoreZeros,
bool scorePreferColorLiveries,
bool excludeNoDbData,
bool excludeNoExcluded,
334 bool modelVerification,
bool modelVerificationWarnError,
bool modelSetRemoveFailedModel,
bool modelFailover)
336 if (modelFailover) { modelSetRemoveFailedModel =
true; }
338 MatchingMode mode = byModelString ?
ByModelString : ModeNone;
339 if (byIcaoDataAircraft1st) { mode |= ByIcaoOrderAircraftFirst; }
340 if (byIcaoDataAirline1st) { mode |= ByIcaoOrderAirlineFirst; }
341 if (byFamily) { mode |= ByFamily; }
342 if (byLivery) { mode |= ByLivery; }
343 if (byCombinedType) { mode |= ByCombinedType; }
346 if (byVtol) { mode |= ByVtol; }
347 if (byGliderCategory) { mode |= ByCategoryGlider; }
348 if (byMilitaryCategory) { mode |= ByCategoryMilitary; }
349 if (bySmallAircraftCategory) { mode |= ByCategorySmallAircraft; }
352 if (excludeNoDbData) { mode |= ExcludeNoDbData; }
353 if (excludeNoExcluded) { mode |= ExcludeNoExcluded; }
354 if (modelSetRemoveFailedModel) { mode |= ModelSetRemoveFailedModel; }
355 if (modelVerification) { mode |= ModelVerificationAtStartup; }
356 if (modelVerificationWarnError) { mode |= ModelVerificationOnlyWarnError; }
357 if (modelFailover) { mode |= ModelFailoverIfNoModelCanBeAdded; }
358 if (revModelString) { mode |= ReverseLookupModelString; }
359 if (revLiveryIds) { mode |= ReverseLookupSwiftLiveryIds; }
Non-owning reference to a CPropertyIndex with a subset of its features.
CastType frontCasted() const
First element casted to given type, usually the PropertIndex enum.
bool isMyself() const
Myself index, used with nesting.
ColumnIndex
Base class enums.
void setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant)
Set property by index.
QVariant propertyByIndex(CPropertyIndexRef index) const
Property by index.
bool doRunMsMatchingStageScript() const
Run the scripts.
static const QString & forceFlagToString(ForceModeFlag forceFlag)
Force flag to string.
static MatchingMode matchingMode(bool revModelString, bool revLiveryIds, bool byModelString, bool byIcaoDataAircraft1st, bool byIcaoDataAirline1st, bool byFamily, bool byLivery, bool byCombinedType, bool byForceMilitary, bool byForceCivilian, bool byVtol, bool byGliderCategory, bool byMilitaryCategory, bool bySmallAircraftCategory, bool scoreIgnoreZeros, bool scorePreferColorLiveries, bool excludeNoDbData, bool excludeNoExcluded, bool modelVerification, bool modelVerificationWarnError, bool modelSetRemoveFailedModel, bool modelFailover)
Mode by flags.
bool isReverseLookupModelString() const
Reverse lookup.
void setOnlyShowVerificationWarningsAndErrors(bool only)
Set the "show only errors" mode.
static const QString & algorithmToString(MatchingAlgorithm algorithm)
Algorithm to string.
QString getForceModeAsString() const
Force mode as string.
QString convertToQString(bool i18n=false) const
Cast as QString.
MatchingMode getMatchingMode() const
Matching mode.
void setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant)
Set property by index.
static QString forceToString(ForceMode force)
Force to string.
bool useCategoryMatching() const
Use category matching.
static QString modeToString(MatchingMode mode)
Enumeration as string.
PickSimilarStrategy
How to pick among similar candiates.
MatchingModeFlag
Enabled matching mode flags.
@ ScorePreferColorLiveries
prefer color liveries
@ ByIcaoData
ICAO airline and aircraft codes.
@ ScoreIgnoreZeros
zero scores are ignored
@ ByMilitary
military (in) will only search in military
@ ByCivilian
civilian (in) will only search in civilian
@ ByModelString
allow exact model string match
bool isReverseLookupSwiftLiveryIds() const
Reverse lookup.
void setVerificationAtStartup(bool verify)
Set startup verification.
CAircraftMatcherSetup()
Constructor.
QVariant propertyByIndex(CPropertyIndexRef index) const
Property by index.
ForceModeFlag
Force values.
bool doRunMsReverseLookupScript() const
Run the scripts.
void setAirlineGroupBehaviour(bool ifNoAirline, bool sameAsAirline)
Airline group behaviour.
void setPickStrategy(PickSimilarStrategy strategy)
Set the strategy.
bool setMatchingAlgorithm(MatchingAlgorithm algorithm, bool reset=true)
Algorithm.
QString getMatchingModeAsString() const
Matching mode as string.
void resetReverseLookup()
Reverse lookup.
void setMatchingMode(MatchingMode mode)
Dynamic offset values?
MatchingAlgorithm getMatchingAlgorithm() const
Algorithm.
static const QString & modeFlagToString(MatchingModeFlag modeFlag)
Enumeration as string.
const QString & getMatchingAlgorithmAsString() const
Algorithm as string.
static const QString & strategyToString(PickSimilarStrategy strategy)
Strategy to string.
const QString & getPickStrategyAsString() const
Strategy as string.
MatchingAlgorithm
Matching algorithm.
SWIFT_MISC_EXPORT const QString & boolToOnOff(bool v)
Bool to on/off.
#define SWIFT_DEFINE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template definition of mixins for a CValueObject subclass.