Skip to content

Commit ddd9722

Browse files
committed
support optional checker (null if disabled)
1 parent 806e7cd commit ddd9722

21 files changed

+483
-230
lines changed

src/main/java/fr/jmmc/jmcs/util/NumberUtils.java

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,9 @@ public final class NumberUtils {
5757
/** shared Double = 1 instance */
5858
public final static Double DBL_ONE = Double.valueOf(1d);
5959
/** default formatter */
60-
private final static NumberFormat _fmtDef;
60+
private final static NumberFormat _fmtDef = new DecimalFormat("0.0##");
6161
/** scientific formatter */
62-
private final static NumberFormat _fmtScience = new DecimalFormat("0.000E0");
63-
64-
static {
65-
_fmtDef = new DecimalFormat("0.000");
66-
}
62+
private final static NumberFormat _fmtScience = new DecimalFormat("0.0##E0");
6763

6864
/**
6965
* Private constructor
@@ -204,9 +200,8 @@ public static double trimTo9Digits(final double value) {
204200

205201
/**
206202
* Format the given double value using custom formaters:
207-
* - '0' if abs(val) < 1e-9
208-
* - 0.000 if 1e-3 < abs(val) < 1e6
209-
* - 0.0##E0 else
203+
* - 0.0## if 1e-3 < abs(val) < 1e4
204+
* - 0.0##E0 otherwise
210205
*
211206
* Note: this method is not thread safe (synchronization must be performed by callers)
212207
*
@@ -219,12 +214,7 @@ public static String format(final double val) {
219214
}
220215
final double abs = Math.abs(val);
221216

222-
if (abs < 1e-9d) {
223-
// means zero:
224-
return "0";
225-
}
226-
227-
if ((abs < 1e-3d) || (abs > 1e6d)) {
217+
if ((abs > 0.0) && ((abs < 1e-3) || (abs > 1e4))) {
228218
return FormatterUtils.format(_fmtScience, val);
229219
}
230220
return FormatterUtils.format(_fmtDef, val);

src/main/java/fr/jmmc/oitools/fits/FitsHDU.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -742,7 +742,9 @@ public void checkKeywords(final OIFitsChecker checker) {
742742
if ((value == null) || OIFitsChecker.isInspectRules()) {
743743
if (!keyword.isOptional()) {
744744
// rule [GENERIC_KEYWORD_MANDATORY]
745-
checker.ruleFailed(Rule.GENERIC_KEYWORD_MANDATORY, this, keywordName);
745+
if (checker != null) {
746+
checker.ruleFailed(Rule.GENERIC_KEYWORD_MANDATORY, this, keywordName);
747+
}
746748
}
747749
}
748750
if ((value != null) || OIFitsChecker.isInspectRules()) {
@@ -768,7 +770,9 @@ public void checkKeywords(final OIFitsChecker checker) {
768770
public void checkKeywordFormat(final OIFitsChecker checker, final FitsHDU hduFits, final KeywordMeta keyword, final Types kDataType) {
769771
if ((kDataType != keyword.getDataType()) || OIFitsChecker.isInspectRules()) {
770772
// rule [GENERIC_KEYWORD_FORMAT] check if the keyword format matches the expected format (data type)
771-
checker.ruleFailed(Rule.GENERIC_KEYWORD_FORMAT, hduFits, keyword.getName()).addKeywordValue(kDataType.getRepresentation(), keyword.getType());
773+
if (checker != null) {
774+
checker.ruleFailed(Rule.GENERIC_KEYWORD_FORMAT, hduFits, keyword.getName()).addKeywordValue(kDataType.getRepresentation(), keyword.getType());
775+
}
772776
}
773777
}
774778

@@ -782,7 +786,9 @@ public void checkMJD(final OIFitsChecker checker, final String name, final doubl
782786
// rule [GENERIC_MJD_RANGE] check if the MJD value is within 'normal' range (1933 - 2150)
783787
// mjd can be NaN and then is not checked:
784788
if (((mjd < MJD_1933) || (mjd > MJD_2150)) || OIFitsChecker.isInspectRules()) {
785-
checker.ruleFailed(Rule.GENERIC_MJD_RANGE, this, name).addKeywordValue(mjd, MJD_1933 + " - " + MJD_2150);
789+
if (checker != null) {
790+
checker.ruleFailed(Rule.GENERIC_MJD_RANGE, this, name).addKeywordValue(mjd, MJD_1933 + " - " + MJD_2150);
791+
}
786792
}
787793
}
788794

@@ -817,15 +823,19 @@ public static void checkDateObsKeyword(final OIFitsChecker checker, final String
817823

818824
if (!valid || OIFitsChecker.isInspectRules()) {
819825
// rule [GENERIC_DATE_OBS_STANDARD] check if the DATE_OBS keyword is in the format 'YYYY-MM-DD'
820-
checker.ruleFailed(Rule.GENERIC_DATE_OBS_STANDARD, hdu, OIFitsConstants.KEYWORD_DATE_OBS).addKeywordValue(dateObs);
826+
if (checker != null) {
827+
checker.ruleFailed(Rule.GENERIC_DATE_OBS_STANDARD, hdu, OIFitsConstants.KEYWORD_DATE_OBS).addKeywordValue(dateObs);
828+
}
821829
}
822830
if (valid || OIFitsChecker.isInspectRules()) {
823831
final Calendar cal = sdf.getCalendar();
824832
final int year = cal.get(Calendar.YEAR);
825833

826834
if (((year < YEAR_MIN) || (year > YEAR_MAX)) || OIFitsChecker.isInspectRules()) {
827835
// rule [GENERIC_DATE_OBS_RANGE] check if the DATE_OBS value is within 'normal' range (1933 - 2150)
828-
checker.ruleFailed(Rule.GENERIC_DATE_OBS_RANGE, hdu, OIFitsConstants.KEYWORD_DATE_OBS).addKeywordValue(dateObs, ("" + YEAR_MIN + " - " + YEAR_MAX));
836+
if (checker != null) {
837+
checker.ruleFailed(Rule.GENERIC_DATE_OBS_RANGE, hdu, OIFitsConstants.KEYWORD_DATE_OBS).addKeywordValue(dateObs, ("" + YEAR_MIN + " - " + YEAR_MAX));
838+
}
829839
}
830840
}
831841
}

src/main/java/fr/jmmc/oitools/fits/FitsTable.java

Lines changed: 116 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -1220,12 +1220,12 @@ public final Object getMinMaxColumnValue(final String name) {
12201220
break;
12211221
}
12221222
// use column flag if present (OIData tables):
1223-
final boolean[][] flags = (this instanceof OIData) ? ((OIData)this).getFlag(): null;
1224-
1223+
final boolean[][] flags = (this instanceof OIData) ? ((OIData) this).getFlag() : null;
1224+
12251225
for (int i = 0, len = dValues.length; i < len; i++) {
12261226
final double[] dRowValues = dValues[i];
12271227
final boolean[] rowFlags = (flags != null) ? flags[i] : null;
1228-
1228+
12291229
for (int j = 0, jlen = dRowValues.length; j < jlen; j++) {
12301230
if ((rowFlags == null) || !rowFlags[j]) {
12311231
if (dRowValues[j] < dMin) {
@@ -1402,13 +1402,15 @@ public void checkColumns(final OIFitsChecker checker) {
14021402
* @return column definition or null if undefined
14031403
*/
14041404
public final ColumnMeta getColumnMeta(final String name) {
1405-
ColumnMeta meta = getColumnDesc(name);
1406-
if (meta != null) {
1407-
return meta;
1408-
}
1409-
meta = getColumnDerivedDesc(name);
1410-
if (meta != null) {
1411-
return meta;
1405+
if (name != null) {
1406+
ColumnMeta meta = getColumnDesc(name);
1407+
if (meta != null) {
1408+
return meta;
1409+
}
1410+
meta = getColumnDerivedDesc(name);
1411+
if (meta != null) {
1412+
return meta;
1413+
}
14121414
}
14131415
return null;
14141416
}
@@ -1425,17 +1427,19 @@ public final ColumnMeta getColumnMeta(final String name) {
14251427
* type
14261428
*/
14271429
public final String[] getColumnAsString(final String name) {
1428-
ColumnMeta meta = getColumnDesc(name);
1429-
if (meta != null
1430-
&& meta.getDataType() == Types.TYPE_CHAR
1431-
&& !meta.isArray()) {
1432-
return getColumnString(name);
1433-
}
1434-
meta = getColumnDerivedDesc(name);
1435-
if (meta != null
1436-
&& meta.getDataType() == Types.TYPE_CHAR
1437-
&& !meta.isArray()) {
1438-
return getColumnDerivedString(name);
1430+
if (name != null) {
1431+
ColumnMeta meta = getColumnDesc(name);
1432+
if (meta != null
1433+
&& meta.getDataType() == Types.TYPE_CHAR
1434+
&& !meta.isArray()) {
1435+
return getColumnString(name);
1436+
}
1437+
meta = getColumnDerivedDesc(name);
1438+
if (meta != null
1439+
&& meta.getDataType() == Types.TYPE_CHAR
1440+
&& !meta.isArray()) {
1441+
return getColumnDerivedString(name);
1442+
}
14391443
}
14401444
return null;
14411445
}
@@ -1449,17 +1453,19 @@ public final String[] getColumnAsString(final String name) {
14491453
* type
14501454
*/
14511455
public final int[] getColumnAsInt(final String name) {
1452-
ColumnMeta meta = getColumnDesc(name);
1453-
if (meta != null
1454-
&& meta.getDataType() == Types.TYPE_INT
1455-
&& !meta.isArray()) {
1456-
return getColumnInt(name);
1457-
}
1458-
meta = getColumnDerivedDesc(name);
1459-
if (meta != null
1460-
&& meta.getDataType() == Types.TYPE_INT
1461-
&& !meta.isArray()) {
1462-
return getColumnDerivedInt(name);
1456+
if (name != null) {
1457+
ColumnMeta meta = getColumnDesc(name);
1458+
if (meta != null
1459+
&& meta.getDataType() == Types.TYPE_INT
1460+
&& !meta.isArray()) {
1461+
return getColumnInt(name);
1462+
}
1463+
meta = getColumnDerivedDesc(name);
1464+
if (meta != null
1465+
&& meta.getDataType() == Types.TYPE_INT
1466+
&& !meta.isArray()) {
1467+
return getColumnDerivedInt(name);
1468+
}
14631469
}
14641470
return null;
14651471
}
@@ -1473,17 +1479,19 @@ public final int[] getColumnAsInt(final String name) {
14731479
* type
14741480
*/
14751481
public final int[][] getColumnAsInts(final String name) {
1476-
ColumnMeta meta = getColumnDesc(name);
1477-
if (meta != null
1478-
&& meta.getDataType() == Types.TYPE_INT
1479-
&& meta.isArray()) {
1480-
return getColumnInts(name);
1481-
}
1482-
meta = getColumnDerivedDesc(name);
1483-
if (meta != null
1484-
&& meta.getDataType() == Types.TYPE_INT
1485-
&& meta.isArray()) {
1486-
return getColumnDerivedInts(name);
1482+
if (name != null) {
1483+
ColumnMeta meta = getColumnDesc(name);
1484+
if (meta != null
1485+
&& meta.getDataType() == Types.TYPE_INT
1486+
&& meta.isArray()) {
1487+
return getColumnInts(name);
1488+
}
1489+
meta = getColumnDerivedDesc(name);
1490+
if (meta != null
1491+
&& meta.getDataType() == Types.TYPE_INT
1492+
&& meta.isArray()) {
1493+
return getColumnDerivedInts(name);
1494+
}
14871495
}
14881496
return null;
14891497
}
@@ -1497,17 +1505,19 @@ public final int[][] getColumnAsInts(final String name) {
14971505
* type
14981506
*/
14991507
public final short[] getColumnAsShort(final String name) {
1500-
ColumnMeta meta = getColumnDesc(name);
1501-
if (meta != null
1502-
&& meta.getDataType() == Types.TYPE_SHORT
1503-
&& !meta.isArray()) {
1504-
return getColumnShort(name);
1505-
}
1506-
meta = getColumnDerivedDesc(name);
1507-
if (meta != null
1508-
&& meta.getDataType() == Types.TYPE_SHORT
1509-
&& !meta.isArray()) {
1510-
return getColumnDerivedShort(name);
1508+
if (name != null) {
1509+
ColumnMeta meta = getColumnDesc(name);
1510+
if (meta != null
1511+
&& meta.getDataType() == Types.TYPE_SHORT
1512+
&& !meta.isArray()) {
1513+
return getColumnShort(name);
1514+
}
1515+
meta = getColumnDerivedDesc(name);
1516+
if (meta != null
1517+
&& meta.getDataType() == Types.TYPE_SHORT
1518+
&& !meta.isArray()) {
1519+
return getColumnDerivedShort(name);
1520+
}
15111521
}
15121522
return null;
15131523
}
@@ -1521,17 +1531,19 @@ public final short[] getColumnAsShort(final String name) {
15211531
* type
15221532
*/
15231533
public final short[][] getColumnAsShorts(final String name) {
1524-
ColumnMeta meta = getColumnDesc(name);
1525-
if (meta != null
1526-
&& meta.getDataType() == Types.TYPE_SHORT
1527-
&& meta.isArray()) {
1528-
return getColumnShorts(name);
1529-
}
1530-
meta = getColumnDerivedDesc(name);
1531-
if (meta != null
1532-
&& meta.getDataType() == Types.TYPE_SHORT
1533-
&& meta.isArray()) {
1534-
return getColumnDerivedShorts(name);
1534+
if (name != null) {
1535+
ColumnMeta meta = getColumnDesc(name);
1536+
if (meta != null
1537+
&& meta.getDataType() == Types.TYPE_SHORT
1538+
&& meta.isArray()) {
1539+
return getColumnShorts(name);
1540+
}
1541+
meta = getColumnDerivedDesc(name);
1542+
if (meta != null
1543+
&& meta.getDataType() == Types.TYPE_SHORT
1544+
&& meta.isArray()) {
1545+
return getColumnDerivedShorts(name);
1546+
}
15351547
}
15361548
return null;
15371549
}
@@ -1545,17 +1557,19 @@ public final short[][] getColumnAsShorts(final String name) {
15451557
* type
15461558
*/
15471559
public final float[] getColumnAsFloat(final String name) {
1548-
ColumnMeta meta = getColumnDesc(name);
1549-
if (meta != null
1550-
&& meta.getDataType() == Types.TYPE_REAL
1551-
&& !meta.isArray()) {
1552-
return getColumnFloat(name);
1553-
}
1554-
meta = getColumnDerivedDesc(name);
1555-
if (meta != null
1556-
&& meta.getDataType() == Types.TYPE_REAL
1557-
&& !meta.isArray()) {
1558-
return getColumnDerivedFloat(name);
1560+
if (name != null) {
1561+
ColumnMeta meta = getColumnDesc(name);
1562+
if (meta != null
1563+
&& meta.getDataType() == Types.TYPE_REAL
1564+
&& !meta.isArray()) {
1565+
return getColumnFloat(name);
1566+
}
1567+
meta = getColumnDerivedDesc(name);
1568+
if (meta != null
1569+
&& meta.getDataType() == Types.TYPE_REAL
1570+
&& !meta.isArray()) {
1571+
return getColumnDerivedFloat(name);
1572+
}
15591573
}
15601574
return null;
15611575
}
@@ -1570,17 +1584,19 @@ public final float[] getColumnAsFloat(final String name) {
15701584
* type
15711585
*/
15721586
public final double[] getColumnAsDouble(final String name) {
1573-
ColumnMeta meta = getColumnDesc(name);
1574-
if (meta != null
1575-
&& meta.getDataType() == Types.TYPE_DBL
1576-
&& !meta.isArray()) {
1577-
return getColumnDouble(name);
1578-
}
1579-
meta = getColumnDerivedDesc(name);
1580-
if (meta != null
1581-
&& meta.getDataType() == Types.TYPE_DBL
1582-
&& !meta.isArray()) {
1583-
return getDerivedColumnAsDouble(name);
1587+
if (name != null) {
1588+
ColumnMeta meta = getColumnDesc(name);
1589+
if (meta != null
1590+
&& meta.getDataType() == Types.TYPE_DBL
1591+
&& !meta.isArray()) {
1592+
return getColumnDouble(name);
1593+
}
1594+
meta = getColumnDerivedDesc(name);
1595+
if (meta != null
1596+
&& meta.getDataType() == Types.TYPE_DBL
1597+
&& !meta.isArray()) {
1598+
return getDerivedColumnAsDouble(name);
1599+
}
15841600
}
15851601
return null;
15861602
}
@@ -1607,17 +1623,19 @@ protected double[] getDerivedColumnAsDouble(final String name) {
16071623
* type
16081624
*/
16091625
public final double[][] getColumnAsDoubles(final String name) {
1610-
ColumnMeta meta = getColumnDesc(name);
1611-
if (meta != null
1612-
&& meta.getDataType() == Types.TYPE_DBL
1613-
&& meta.isArray()) {
1614-
return getColumnDoubles(name);
1615-
}
1616-
meta = getColumnDerivedDesc(name);
1617-
if (meta != null
1618-
&& meta.getDataType() == Types.TYPE_DBL
1619-
&& meta.isArray()) {
1620-
return getDerivedColumnAsDoubles(name);
1626+
if (name != null) {
1627+
ColumnMeta meta = getColumnDesc(name);
1628+
if (meta != null
1629+
&& meta.getDataType() == Types.TYPE_DBL
1630+
&& meta.isArray()) {
1631+
return getColumnDoubles(name);
1632+
}
1633+
meta = getColumnDerivedDesc(name);
1634+
if (meta != null
1635+
&& meta.getDataType() == Types.TYPE_DBL
1636+
&& meta.isArray()) {
1637+
return getDerivedColumnAsDoubles(name);
1638+
}
16211639
}
16221640
return null;
16231641
}

0 commit comments

Comments
 (0)