Nitf::TreState Nitf::SectgaParser::isTreValid(const DynamicObject& tre, ostream& reporter) const { TreState status(VALID); set<string> testSet; unsigned int numFields = 0; testSet.clear(); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, SECTGA::SEC_ID, testSet, true, true, false)); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, SECTGA::SEC_BE, testSet, true, true, false)); status = MaxState(status, testTagValueRange<unsigned int>(tre, reporter, &numFields, SECTGA::RESERVED001, 0U, 0U)); unsigned int totalFields = tre.getNumAttributes(); if (status != INVALID && totalFields != numFields) { reporter << "Total fields in the Dynamic Object(" << totalFields << ") did not match the number found(" << numFields << ") "; status = INVALID; } if (status == INVALID) { reporter << " INVALID fields found in the SECTGA TAG/SDE\n" ; } else if (status == SUSPECT) { reporter << " SUSPECT fields found in the SECTGA TAG/SDE\n" ; } return status; }
QVariant DynamicObjectItemModel::data(const QModelIndex& index, int role) const { if (index.isValid() == false) { return QVariant(); } AttributeWrapper* pWrapper = reinterpret_cast<AttributeWrapper*>(index.internalPointer()); if (pWrapper != NULL) { const string& attributeName = pWrapper->getName(); DataVariant* pValue = pWrapper->getValue(); if (role == Qt::DisplayRole) { int column = index.column(); if (column == 0) { // Name return QVariant(QString::fromStdString(attributeName)); } else if ((pValue != NULL) && (pValue->isValid() == true)) { string attributeType = pValue->getTypeName(); if (column == 1) { // Value if (attributeType == TypeConverter::toString<DynamicObject>()) { DynamicObject* pObject = dv_cast<DynamicObject>(pValue); if (pObject != NULL) { QString valueText = QString::number(pObject->getNumAttributes()) + " children"; return QVariant(valueText); } } else { string attributeValue = pValue->toDisplayString(); return QVariant(QString::fromStdString(attributeValue)); } } else if (column == 2) { // Type return QVariant(QString::fromStdString(attributeType)); } } } else if (role == Qt::UserRole) { return QVariant::fromValue(pValue); } } return QVariant(); }
Nitf::TreState Nitf::PatchbParser::isTreValid(const DynamicObject& tre, ostream& reporter) const { TreState status(VALID); set<string> testSet; unsigned int numFields = 0; status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, PATCHB::PAT_NO, 1, 999)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, PATCHB::LAST_PAT_FLAG, 0, 1, true)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, PATCHB::LNSTRT, 1, 9999999)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, PATCHB::LNSTOP, 20, 9999999)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, PATCHB::AZL, 20, 99999)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, PATCHB::NVL, 20, 99999, true)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, PATCHB::FVL, 1, 681, true)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, PATCHB::NPIXEL, 170, 43000)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, PATCHB::FVPIX, 1, 43000)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, PATCHB::FRAME, 1, 512, true)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, PATCHB::UTC, 0.0, 86399.99)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, PATCHB::SHEAD, 0.0, 359.999)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, PATCHB::GRAVITY, 31.0, 33.9999, true)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, PATCHB::INS_V_NC, -9999, 9999)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, PATCHB::INS_V_EC, -9999, 9999)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, PATCHB::INS_V_DC, -9999, 9999)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, PATCHB::OFFLAT, -80.0, 80.0, true)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, PATCHB::OFFLONG, -80.0, 80.0, true)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, PATCHB::TRACK, 0, 359)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, PATCHB::GSWEEP, 0.0, 120.00)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, PATCHB::SHEAR, 0.85, 1.0, true)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, PATCHB::BATCH_NO, 1, 999999, true)); unsigned int totalFields = tre.getNumAttributes(); if (status != INVALID && totalFields != numFields) { reporter << "Total fields in the Dynamic Object(" << totalFields << ") did not match the number found(" << numFields << ") "; status = INVALID; } if (status == INVALID) { reporter << " INVALID fields found in the PATCHB TAG/SDE\n" ; } else if (status == SUSPECT) { reporter << " SUSPECT fields found in the PATCHB TAG/SDE\n" ; } return status; }
Nitf::TreState Nitf::RpcParser::isTreValid(const DynamicObject& tre, ostream& reporter) const { TreState status(VALID); set<string> testSet; unsigned int numFields = 0; unsigned int u; static const double minCoef(-9.999999E9); static const double maxCoef(9.999999E9); status = MaxState(status, testTagValueRange<bool>(tre, reporter, &numFields, SUCCESS, false, true)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, ERR_BIAS, 0.0, 9999.99)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, ERR_RAND, 0.0, 9999.99)); status = MaxState(status, testTagValueRange<unsigned int>(tre, reporter, &numFields, LINE_OFFSET, 0U, 999999U)); status = MaxState(status, testTagValueRange<unsigned int>(tre, reporter, &numFields, SAMP_OFFSET, 0U, 99999U)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, LAT_OFFSET, -90.0000, 90.0000)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, LONG_OFFSET, -180.0000, 180.0000)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, HEIGHT_OFFSET, -9999, 9999)); status = MaxState(status, testTagValueRange<unsigned int>(tre, reporter, &numFields, LINE_SCALE, 1U, 999999U)); status = MaxState(status, testTagValueRange<unsigned int>(tre, reporter, &numFields, SAMP_SCALE, 1U, 99999U)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, LAT_SCALE, -90.0000, 90.0000)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, LONG_SCALE, -180.0000, 180.0000)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, HEIGHT_SCALE, -9999, 9999)); for (u = 1; u <= 20; ++u) { status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, getRpcCoefficient(LINE_NUMERATOR_COEF_PREFIX, u), minCoef, maxCoef)); } for (u = 1; u <= 20; ++u) { status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, getRpcCoefficient(LINE_DENOMINATOR_COEF_PREFIX, u), minCoef, maxCoef)); } for (u = 1; u <= 20; ++u) { status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, getRpcCoefficient(SAMPLE_NUMERATOR_COEF_PREFIX, u), minCoef, maxCoef)); } for (u = 1; u <= 20; ++u) { status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, getRpcCoefficient(SAMPLE_DENOMINATOR_COEF_PREFIX, u), minCoef, maxCoef)); } unsigned int totalFields = tre.getNumAttributes(); if (status != INVALID && totalFields != numFields) { reporter << "Total fields in the Dynamic Object(" << totalFields << ") did not match the number found(" << numFields << ") "; status = INVALID; } if (status == INVALID) { reporter << " INVALID fields found in the RPC TAG/SDE\n" ; } else if (status == SUSPECT) { reporter << " SUSPECT fields found in the RPC TAG/SDE\n" ; } return status; }
Nitf::TreState Nitf::StdidcParser::isTreValid(const DynamicObject& tre, ostream& reporter) const { TreState status(VALID); set<string> testSet; unsigned int numFields = 0; if (status != INVALID) { // Just check that the field exists. Assume the DateTime class will contain a vaild date/time string fieldName = STDIDC::ACQUISITION_DATE; if (tre.getAttribute(fieldName).getPointerToValue<DateTime>() == NULL) { reporter << "Field \"" << fieldName << "\" missing from the Dynamic Object"; status = INVALID; } else { ++numFields; } } status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, STDIDC::MISSION, testSet, true, true, false)); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, STDIDC::PASS, testSet, true, true, false)); status = MaxState(status, testTagValueRange<unsigned int>(tre, reporter, &numFields, STDIDC::OP_NUM, 0U, 999U)); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, STDIDC::START_SEGMENT, testSet, true, true, false)); status = MaxState(status, testTagValueRange<unsigned int>(tre, reporter, &numFields, STDIDC::REPRO_NUM, 0U, 99U)); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, STDIDC::REPLAY_REGEN, testSet, true, true, false)); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, STDIDC::BLANK_FILL, testSet, true, true, false)); status = MaxState(status, testTagValueRange<unsigned int>(tre, reporter, &numFields, STDIDC::START_COLUMN, 1U, 999U)); status = MaxState(status, testTagValueRange<unsigned int>(tre, reporter, &numFields, STDIDC::START_ROW, 1U, 99999U)); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, STDIDC::END_SEGMENT, testSet, true, true, false)); status = MaxState(status, testTagValueRange<unsigned int>(tre, reporter, &numFields, STDIDC::END_COLUMN, 1U, 999U)); status = MaxState(status, testTagValueRange<unsigned int>(tre, reporter, &numFields, STDIDC::END_ROW, 1U, 99999U)); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, STDIDC::COUNTRY, testSet, true, true, false)); status = MaxState(status, testTagValueRange<unsigned int>(tre, reporter, &numFields, STDIDC::WAC, 1U, 1866U, true)); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, STDIDC::LOCATION, testSet, true, true, false)); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, STDIDC::RESERVED2, testSet, true, true, false)); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, STDIDC::RESERVED3, testSet, true, true, false)); unsigned int totalFields = tre.getNumAttributes(); if (status != INVALID && totalFields != numFields) { reporter << "Total fields in the Dynamic Object(" << totalFields << ") did not match the number found(" << numFields << ") "; status = INVALID; } if (status == INVALID) { reporter << " INVALID fields found in the STDIDC TAG/SDE\n" ; } else if (status == SUSPECT) { reporter << " SUSPECT fields found in the STDIDC TAG/SDE\n" ; } return status; }
Nitf::TreState Nitf::AimidbParser::isTreValid(const DynamicObject& tre, ostream& reporter) const { TreState status(VALID); set<string> testSet; unsigned int numFields = 0; FactoryResource<DateTime> appDTG; if (tre.getAttribute("ACQUISITION_DATE").getPointerToValue<DateTime>() == NULL) { reporter << "Field \"" << AIMIDB::ACQUISITION_DATE << "\" missing from the Dynamic Object"; status = INVALID; } else { ++numFields; } testSet.clear(); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, AIMIDB::MISSION_NO, testSet, false, true, false)); testSet.clear(); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, AIMIDB::MISSION_IDENTIFICATION, testSet, false, true, false)); testSet.clear(); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, AIMIDB::FLIGHT_NO, testSet, false, true, false)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, AIMIDB::OP_NUM, 0, 999)); testSet.clear(); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, AIMIDB::CURRENT_SEGMENT, testSet, true, true, false)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, AIMIDB::REPRO_NUM, 0, 99)); testSet.clear(); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, AIMIDB::REPLAY, testSet, true, true, false)); testSet.clear(); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, AIMIDB::RESERVED1, testSet, true, true, true)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, AIMIDB::START_TILE_COLUMN, 1, 99)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, AIMIDB::START_TILE_ROW, 1, 99999)); testSet.clear(); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, AIMIDB::END_SEGMENT, testSet, false, true, false)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, AIMIDB::END_TILE_COLUMN, 1, 99)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, AIMIDB::END_TILE_ROW, 1, 99999)); testSet.clear(); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, AIMIDB::COUNTRY, testSet, true, true, false)); testSet.clear(); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, AIMIDB::RESERVED2, testSet, true, true, true)); testSet.clear(); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, AIMIDB::LOCATION, testSet, true, true, false)); testSet.clear(); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, AIMIDB::RESERVED3, testSet, true, true, true)); unsigned int totalFields = tre.getNumAttributes(); if (status != INVALID && totalFields != numFields) { reporter << "Total fields in the Dynamic Object(" << totalFields << ") did not match the number found(" << numFields << ") "; status = INVALID; } if (status == INVALID) { reporter << " INVALID fields found in the AIMIDB TAG/SDE\n" ; } else if (status == SUSPECT) { reporter << " SUSPECT fields found in the AIMIDB TAG/SDE\n" ; } return status; }
Nitf::TreState Nitf::MensrbParser::isTreValid(const DynamicObject& tre, ostream& reporter) const { TreState status(VALID); set<string> testSet; unsigned int numFields = 0; testSet.clear(); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, MENSRB::ACFT_LOC, testSet, false, true, false)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, MENSRB::ACFT_LOC_ACCY, 0.0, 999.99)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, MENSRB::ACFT_ALT, 0, 999999)); testSet.clear(); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, MENSRB::RP_LOC, testSet, false, true, false)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, MENSRB::RP_LOC_ACCY, 0.0, 999.99)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, MENSRB::RP_ELEV, -1000, 30000)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, MENSRB::OF_PC_R, -9999.9, 9999.9, true)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, MENSRB::OF_PC_A, -9999.9, 9999.9, true)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, MENSRB::COSGRZ, 0.0, 1.0)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, MENSRB::RGCRP, 0, 3000000)); testSet.clear(); testSet.insert("L"); testSet.insert("R"); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, MENSRB::RLMAP, testSet, false, false, true)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, MENSRB::RP_ROW, 1, 99999, true)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, MENSRB::RP_COL, 1, 99999, true)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, MENSRB::C_R_NC, -1.0, 1.0)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, MENSRB::C_R_EC, -1.0, 1.0)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, MENSRB::C_R_DC, -1.0, 1.0)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, MENSRB::C_AZ_NC, -1.0, 1.0)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, MENSRB::C_AZ_EC, -1.0, 1.0)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, MENSRB::C_AZ_DC, -1.0, 1.0)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, MENSRB::C_AL_NC, -1.0, 1.0)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, MENSRB::C_AL_EC, -1.0, 1.0)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, MENSRB::C_AL_DC, -1.0, 1.0)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, MENSRB::TOTAL_TILES_COLS, 1, 999, true)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, MENSRB::TOTAL_TILES_ROWS, 1, 999, true)); unsigned int totalFields = tre.getNumAttributes(); if (status != INVALID && totalFields != numFields) { reporter << "Total fields in the Dynamic Object(" << totalFields << ") did not match the number found(" << numFields << ") "; status = INVALID; } if (status == INVALID) { reporter << " INVALID fields found in the MENSRB TAG/SDE\n" ; } else if (status == SUSPECT) { reporter << " SUSPECT fields found in the MENSRB TAG/SDE\n" ; } return status; }
Nitf::TreState Nitf::BandsaParser::isTreValid(const DynamicObject& tre, ostream& reporter) const { TreState status(VALID); set<string> testSet; unsigned int numFields = 0; unsigned int bandcount(0); try { bandcount = dv_cast<unsigned int>(tre.getAttribute(BANDSA::BANDCOUNT)); numFields++; } catch (const bad_cast&) { reporter << "Field \"" << "BANDCOUNT" << "\" missing from the Dynamic Object"; status = INVALID; } status = MaxState(status, testTagValueRange(reporter, bandcount, 1U, 999U)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, BANDSA::ROW_SPACING, 0.0F, 9999.99F)); testSet.clear(); testSet.insert("f"); testSet.insert("m"); testSet.insert("r"); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, BANDSA::ROW_SPACING_UNITS, testSet, true, true, true)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, BANDSA::COL_SPACING, 0.0F, 9999.99F)); testSet.clear(); testSet.insert("f"); testSet.insert("m"); testSet.insert("r"); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, BANDSA::COL_SPACING_UNITS, testSet, true, true, true)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, BANDSA::FOCAL_LENGTH, 0.005F, 999.99F)); for (unsigned int i = 0; i < bandcount; ++i) { stringstream bandStreamStr; bandStreamStr << "#" << i; string bandStr(bandStreamStr.str()); string fieldName; // In the following cases add 1/2 of the next decimal place (eg +0.005 to 0.01) // to the test range to allow for floating point round off fieldName = BANDSA::BANDPEAK + bandStr; status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, fieldName, 0.005F, 19.995F, true)); fieldName = BANDSA::BANDLBOUND + bandStr; status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, fieldName, 0.005F, 19.995F, true)); fieldName = BANDSA::BANDUBOUND + bandStr; status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, fieldName, 0.005F, 19.995F, true)); fieldName = BANDSA::BANDWIDTH + bandStr; status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, fieldName, 0.005F, 19.995F, true)); fieldName = BANDSA::BANDCALDRK + bandStr; status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, fieldName, 0.05F, 9999.95F, true)); fieldName = BANDSA::BANDCALINC + bandStr; status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, fieldName, 0.005F, 19.995F, true)); fieldName = BANDSA::BANDRESP + bandStr; status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, fieldName, 0.05F, 999.995F, true)); fieldName = BANDSA::BANDASD + bandStr; status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, fieldName, 0.05F, 999.995F, true)); fieldName = BANDSA::BANDGSD + bandStr; status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, fieldName, 0.005F, 99.995F, true)); } unsigned int totalFields = tre.getNumAttributes(); if (status != INVALID && totalFields != numFields) { reporter << "Total fields in the Dynamic Object(" << totalFields << ") did not match the number found(" << numFields << ") "; status = INVALID; } if (status == INVALID) { reporter << " INVALID fields found in the BANDSA TAG/SDE\n" ; } else if (status == SUSPECT) { reporter << " SUSPECT fields found in the BANDSA TAG/SDE\n" ; } return status; }
Nitf::TreState Nitf::Use00aParser::isTreValid(const DynamicObject& tre, ostream& reporter) const { TreState status(VALID); set<string> testSet; unsigned int numFields(0); status = MaxState(status, testTagValueRange<unsigned int>(tre, reporter, &numFields, USE00A::ANGLE_TO_NORTH, 0U, 359U)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, USE00A::MEAN_GSD, 0.0F, 999.9F)); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, USE00A::RESERVED1, testSet, true, true, false)); status = MaxState(status, testTagValueRange<unsigned int>(tre, reporter, &numFields, USE00A::DYNAMIC_RANGE, 0U, 99999U, true)); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, USE00A::RESERVED2, testSet, true, true, false)); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, USE00A::RESERVED3, testSet, true, true, false)); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, USE00A::RESERVED4, testSet, true, true, false)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, USE00A::OBL_ANG, 0.0F, 90.0F, true)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, USE00A::ROLL_ANG, -90.0F, 90.0F, true)); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, USE00A::RESERVED5, testSet, true, true, false)); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, USE00A::RESERVED6, testSet, true, true, false)); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, USE00A::RESERVED7, testSet, true, true, false)); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, USE00A::RESERVED8, testSet, true, true, false)); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, USE00A::RESERVED9, testSet, true, true, false)); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, USE00A::RESERVED10, testSet, true, true, false)); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, USE00A::RESERVED11, testSet, true, true, false)); status = MaxState(status, testTagValueRange<unsigned int>(tre, reporter, &numFields, USE00A::N_REF, 0U, 99U)); status = MaxState(status, testTagValueRange<unsigned int>(tre, reporter, &numFields, USE00A::REV_NUM, 1U, 99999U)); status = MaxState(status, testTagValueRange<unsigned int>(tre, reporter, &numFields, USE00A::N_SEG, 1U, 999U)); status = MaxState(status, testTagValueRange<unsigned int>(tre, reporter, &numFields, USE00A::MAX_LP_SEG, 1U, 999999U, true)); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, USE00A::RESERVED12, testSet, true, true, false)); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, USE00A::RESERVED13, testSet, true, true, false)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, USE00A::SUN_EL, -90.0F, 999.9F)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, USE00A::SUN_AZ, -90.0F, 999.9F)); unsigned int totalFields = tre.getNumAttributes(); if (status != INVALID && totalFields != numFields) { reporter << "Total fields in the Dyanmic Object(" << totalFields << ") did not match the number found(" << numFields << ") "; status = INVALID; } if (status == INVALID) { reporter << " INVALID fields found in the USE00A TAG/SDE\n" ; } else if (status == SUSPECT) { reporter << " SUSPECT fields found in the USE00A TAG/SDE\n" ; } return status; }
Nitf::TreState Nitf::SensraParser::isTreValid(const DynamicObject& tre, ostream& reporter) const { TreState status(VALID); set<string> testSet; unsigned int numFields = 0; status = MaxState(status, testTagValueRange<unsigned int>(tre, reporter, &numFields, SENSRA::REF_ROW, 0U, 99999999U, true)); status = MaxState(status, testTagValueRange<unsigned int>(tre, reporter, &numFields, SENSRA::REF_COL, 0U, 99999999U, true)); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, SENSRA::SENSOR_MODEL, testSet, true, true, false)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, SENSRA::SENSOR_MOUNT, -45, 45, true)); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, SENSRA::SENSOR_LOC, testSet, true, true, false)); testSet.clear(); testSet.insert("B"); testSet.insert("G"); testSet.insert("M"); testSet.insert("R"); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, SENSRA::SENSOR_ALT_SOURCE, testSet, ALL_BLANK_TRUE, NOT_IN_SET_FALSE, EMIT_MSG_NOT_IN_SET_TRUE)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, SENSRA::SENSOR_ALT, -1000, 99000, true)); testSet.clear(); testSet.insert("f"); testSet.insert("m"); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, SENSRA::SENSOR_ALT_UNIT, testSet, ALL_BLANK_TRUE, NOT_IN_SET_FALSE, EMIT_MSG_NOT_IN_SET_TRUE)); status = MaxState(status, testTagValueRange<unsigned int>(tre, reporter, &numFields, SENSRA::SENSOR_AGL, 10U, 99000U, true)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, SENSRA::SENSOR_PITCH, -90.1, 90.1, true)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, SENSRA::SENSOR_ROLL, -180.1, 180.1, true)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, SENSRA::SENSOR_YAW, -180.1, 180.1, true)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, SENSRA::PLATFORM_PITCH, -90.1, 90.1, true)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, SENSRA::PLATFORM_ROLL, -180.1, 180.1, true)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, SENSRA::PLATFORM_HDG, 0.0, 360.0, true)); testSet.clear(); testSet.insert("R"); testSet.insert("N"); testSet.insert("G"); testSet.insert("M"); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, SENSRA::GROUND_SPD_SOURCE, testSet, ALL_BLANK_TRUE, NOT_IN_SET_FALSE, EMIT_MSG_NOT_IN_SET_TRUE)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, SENSRA::GROUND_SPD, 0.0, 10000.0, true)); testSet.clear(); testSet.insert("k"); testSet.insert("f"); testSet.insert("m"); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, SENSRA::GRND_SPD_UNIT, testSet, ALL_BLANK_TRUE, NOT_IN_SET_FALSE, EMIT_MSG_NOT_IN_SET_TRUE)); status = MaxState(status, testTagValueRange<double>(tre, reporter, &numFields, SENSRA::GROUND_TRACK, 0.0, 360.0, true)); status = MaxState(status, testTagValueRange<int>(tre, reporter, &numFields, SENSRA::VERT_VEL, -9999, 9999, true)); testSet.clear(); testSet.insert("f"); testSet.insert("m"); status = MaxState(status, testTagValidBcsASet(tre, reporter, &numFields, SENSRA::VERT_VEL_UNIT, testSet, ALL_BLANK_TRUE, NOT_IN_SET_FALSE, EMIT_MSG_NOT_IN_SET_TRUE)); status = MaxState(status, testTagValueRange<unsigned int>(tre, reporter, &numFields, SENSRA::SWATH_FRAMES, 1U, 9999U, true)); status = MaxState(status, testTagValueRange<unsigned int>(tre, reporter, &numFields, SENSRA::NUM_SWATHS, 1U, 9999U, true)); status = MaxState(status, testTagValueRange<unsigned int>(tre, reporter, &numFields, SENSRA::SPOT_NUM, 1U, 999U, true)); unsigned int totalFields = tre.getNumAttributes(); if (status != INVALID && totalFields != numFields) { reporter << "Total fields in the Dynamic Object(" << totalFields << ") did not match the number found(" << numFields << ") "; status = INVALID; } if (status == INVALID) { reporter << " INVALID fields found in the SENSRA TAG/SDE\n" ; } else if (status == SUSPECT) { reporter << " SUSPECT fields found in the SENSRA TAG/SDE\n" ; } return status; }