2020package fr .jmmc .oitools .meta ;
2121
2222import fr .jmmc .jmcs .util .NumberUtils ;
23+ import fr .jmmc .oitools .OIFitsConstants ;
2324import fr .jmmc .oitools .fits .FitsTable ;
2425import fr .jmmc .oitools .model .ModelBase ;
2526import fr .jmmc .oitools .model .OIFitsChecker ;
@@ -448,7 +449,10 @@ public final boolean checkColumnFormat(final OIFitsChecker checker, final FitsTa
448449 */
449450 private void checkValues (final OIFitsChecker checker , final FitsTable table ,
450451 final Object value , final int columnRows ) {
452+
451453 final String colName = getName ();
454+
455+ String acceptedValues = null ;
452456 boolean error ;
453457
454458 final short [] intAcceptedValues = getIntAcceptedValues ();
@@ -457,16 +461,15 @@ private void checkValues(final OIFitsChecker checker, final FitsTable table,
457461 // OIData: STA_INDEX (2D but nCols=[1,2 or 3]) or TARGET_ID (1D)
458462
459463 // Skip checks if the column is missing (from file):
460- if (checker != null && !checker .hasRule (Rule .GENERIC_COL_MANDATORY , table , colName ) || OIFitsChecker .isInspectRules ()) {
464+ if (( checker != null ) && !checker .hasRule (Rule .GENERIC_COL_MANDATORY , table , colName ) || OIFitsChecker .isInspectRules ()) {
461465 final boolean isArray = isArray ();
462466
463467 if (!isArray ) {
464468 // OIData: TARGET_ID (1D)
465469 final short [] sValues = (short []) value ;
466470
467- short val ;
468471 for (int r = 0 ; r < columnRows ; r ++) {
469- val = sValues [r ];
472+ final short val = sValues [r ];
470473
471474 if (!ModelBase .isUndefined (val ) || OIFitsChecker .isInspectRules ()) {
472475 error = true ;
@@ -481,7 +484,16 @@ private void checkValues(final OIFitsChecker checker, final FitsTable table,
481484 if (error || OIFitsChecker .isInspectRules ()) {
482485 // rule [GENERIC_COL_VAL_ACCEPTED_INT] check if column values match the 'accepted' values (integer)
483486 if (checker != null ) {
484- checker .ruleFailed (Rule .GENERIC_COL_VAL_ACCEPTED_INT , table , colName ).addValueAt (val , getIntAcceptedValuesAsString (), r );
487+ if (!checker .hasFixRule (Rule .OI_TARGET_TARGETID_MIN ) || !OIFitsConstants .COLUMN_TARGET_ID .equals (colName )) {
488+ if (acceptedValues == null ) {
489+ acceptedValues = getIntAcceptedValuesAsString ();
490+ }
491+ checker .ruleFailed (Rule .GENERIC_COL_VAL_ACCEPTED_INT , table , colName ).addValueAt (val , acceptedValues , r );
492+ }
493+ if (OIFitsChecker .FIX_BAD_ACCEPTED_FOR_SINGLE_MATCH && (intAcceptedValues .length == 1 )) {
494+ // TODO: use FIX RULE to log change ...
495+ sValues [r ] = intAcceptedValues [0 ];
496+ }
485497 }
486498 }
487499 }
@@ -490,13 +502,11 @@ private void checkValues(final OIFitsChecker checker, final FitsTable table,
490502 // OIData: STA_INDEX (2D but nCols=[1,2 or 3])
491503 final short [][] sValues = (short [][]) value ;
492504
493- short [] values ;
494- short val ;
495505 for (int r = 0 ; r < columnRows ; r ++) {
496- values = sValues [r ];
506+ final short [] values = sValues [r ];
497507
498508 for (int c = 0 , rlen = values .length ; c < rlen ; c ++) {
499- val = values [c ];
509+ final short val = values [c ];
500510
501511 if (!ModelBase .isUndefined (val ) || OIFitsChecker .isInspectRules ()) {
502512 error = true ;
@@ -511,7 +521,15 @@ private void checkValues(final OIFitsChecker checker, final FitsTable table,
511521 if (error || OIFitsChecker .isInspectRules ()) {
512522 // rule [GENERIC_COL_VAL_ACCEPTED_INT] check if column values match the 'accepted' values (integer)
513523 if (checker != null ) {
514- checker .ruleFailed (Rule .GENERIC_COL_VAL_ACCEPTED_INT , table , colName ).addColValueAt (val , getIntAcceptedValuesAsString (), r , c );
524+ if (acceptedValues == null ) {
525+ acceptedValues = getIntAcceptedValuesAsString ();
526+ }
527+ checker .ruleFailed (Rule .GENERIC_COL_VAL_ACCEPTED_INT , table , colName ).addColValueAt (val , acceptedValues , r , c );
528+
529+ if (OIFitsChecker .FIX_BAD_ACCEPTED_FOR_SINGLE_MATCH && (intAcceptedValues .length == 1 )) {
530+ // TODO: use FIX RULE to log change ...
531+ values [c ] = intAcceptedValues [0 ];
532+ }
515533 }
516534 }
517535 }
@@ -533,11 +551,10 @@ private void checkValues(final OIFitsChecker checker, final FitsTable table,
533551 final String [] sValues = (String []) value ;
534552
535553 String val ;
536- for (int rowNb = 0 ; rowNb < columnRows ; rowNb ++) {
554+ for (int r = 0 ; r < columnRows ; r ++) {
555+ val = sValues [r ];
537556 error = true ;
538557
539- val = sValues [rowNb ];
540-
541558 if (val == null ) {
542559 val = "" ;
543560 } else {
@@ -552,7 +569,15 @@ private void checkValues(final OIFitsChecker checker, final FitsTable table,
552569 if (error || OIFitsChecker .isInspectRules ()) {
553570 // rule [GENERIC_COL_VAL_ACCEPTED_STR] check if column values match the 'accepted' values (string)
554571 if (checker != null ) {
555- checker .ruleFailed (Rule .GENERIC_COL_VAL_ACCEPTED_STR , table , colName ).addValueAt (val , getStringAcceptedValuesAsString (), rowNb );
572+ if (acceptedValues == null ) {
573+ acceptedValues = getStringAcceptedValuesAsString ();
574+ }
575+ checker .ruleFailed (Rule .GENERIC_COL_VAL_ACCEPTED_STR , table , colName ).addValueAt (val , acceptedValues , r );
576+
577+ if (OIFitsChecker .FIX_BAD_ACCEPTED_FOR_SINGLE_MATCH && (stringAcceptedValues .length == 1 )) {
578+ // TODO: use FIX RULE to log change ...
579+ sValues [r ] = stringAcceptedValues [0 ];
580+ }
556581 }
557582 }
558583 }
0 commit comments