Skip to content

Commit ff35702

Browse files
committed
fixed generateCLIargs() to dump all filters
1 parent 0ee1c28 commit ff35702

4 files changed

Lines changed: 107 additions & 41 deletions

File tree

src/main/java/fr/jmmc/oitools/OIFitsProcessor.java

Lines changed: 50 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import java.io.IOException;
3131
import java.util.ArrayList;
3232
import java.util.List;
33+
import java.util.Map;
3334

3435
/**
3536
*
@@ -362,16 +363,15 @@ public static List<String> parseStrings(final String input) {
362363
return baselineList;
363364
}
364365

365-
public static String dumpStrings(List<String> values) {
366+
public static StringBuilder dumpStrings(final List<String> values, final StringBuilder sb) {
366367
if (values == null || values.isEmpty()) {
367-
return "";
368+
return sb;
368369
}
369-
final StringBuilder sb = new StringBuilder();
370370
for (String v : values) {
371371
sb.append(v).append(",");
372372
}
373373
sb.deleteCharAt(sb.length() - 1);
374-
return sb.toString();
374+
return sb;
375375
}
376376

377377
public static List<Range> parseRanges(final String input) {
@@ -398,27 +398,62 @@ public static List<Range> parseRanges(final String input) {
398398
return ranges;
399399
}
400400

401-
public static String dumpRanges(List<Range> values) {
401+
public static StringBuilder dumpRanges(final List<Range> values, final StringBuilder sb) {
402402
if (values == null || values.isEmpty()) {
403-
return "";
403+
return sb;
404404
}
405-
final StringBuilder sb = new StringBuilder();
406405
for (Range r : values) {
407406
sb.append(r.getMin()).append(",").append(r.getMax()).append(",");
408407
}
409408
sb.deleteCharAt(sb.length() - 1);
410-
return sb.toString();
409+
return sb;
411410
}
412411

413412
public static String generateCLIargs(final Selector selector) {
414413
if (selector != null) {
415-
// TODO: make it generic !
416-
return ((selector.getTargetUID() != null) ? OIFitsProcessor.OPTION_TARGET + " " + selector.getTargetUID() + " " : "")
417-
+ ((selector.getInsModeUID() != null) ? OIFitsProcessor.OPTION_INSNAME + " " + selector.getInsModeUID() + " " : "")
418-
+ ((selector.getNightID() != null) ? OIFitsProcessor.OPTION_NIGHT + " " + selector.getNightID() + " " : "")
419-
+ ((selector.hasFilter(Selector.FILTER_STAINDEX)) ? OIFitsProcessor.OPTION_BASELINES + " " + dumpStrings(selector.getFilter(Selector.FILTER_STAINDEX)) + " " : "")
420-
+ ((selector.hasFilter(Selector.FILTER_MJD)) ? OIFitsProcessor.OPTION_MJD_RANGES + " " + dumpRanges(selector.getFilter(Selector.FILTER_MJD)) + " " : "")
421-
+ ((selector.hasFilter(Selector.FILTER_EFFWAVE)) ? OIFitsProcessor.OPTION_WL_RANGES + " " + dumpRanges(selector.getFilter(Selector.FILTER_EFFWAVE)) + " " : "");
414+
final StringBuilder sb = new StringBuilder(128);
415+
416+
if (selector.getTargetUID() != null) {
417+
sb.append(OIFitsProcessor.OPTION_TARGET).append("|").append(Selector.FILTER_TARGET_ID).append(" ").append(selector.getTargetUID()).append(" ");
418+
}
419+
if (selector.getInsModeUID() != null) {
420+
sb.append(OIFitsProcessor.OPTION_INSNAME).append(" ").append(selector.getInsModeUID()).append(" ");
421+
}
422+
if (selector.getNightID() != null) {
423+
sb.append(OIFitsProcessor.OPTION_NIGHT).append("|").append(Selector.FILTER_NIGHT_ID).append(" ").append(selector.getNightID()).append(" ");
424+
}
425+
/* no way to define selector.tables via CLI */
426+
if (selector.hasFilter(Selector.FILTER_STAINDEX)) {
427+
sb.append(OIFitsProcessor.OPTION_BASELINES).append("|").append(Selector.FILTER_STAINDEX).append(" ");
428+
dumpStrings(selector.getFilter(Selector.FILTER_STAINDEX), sb).append(" ");
429+
}
430+
if (selector.hasFilter(Selector.FILTER_STACONF)) {
431+
sb.append("-").append(Selector.FILTER_STACONF).append(" ");
432+
dumpStrings(selector.getFilter(Selector.FILTER_STACONF), sb).append(" ");
433+
}
434+
435+
if (selector.hasFilter(Selector.FILTER_MJD)) {
436+
sb.append(OIFitsProcessor.OPTION_MJD_RANGES).append("|").append(Selector.FILTER_MJD).append(" ");
437+
dumpRanges(selector.getFilter(Selector.FILTER_MJD), sb).append(" ");
438+
}
439+
440+
if (selector.hasFilter(Selector.FILTER_EFFWAVE)) {
441+
sb.append(OIFitsProcessor.OPTION_WL_RANGES).append("|").append(Selector.FILTER_EFFWAVE).append(" ");
442+
dumpRanges(selector.getFilter(Selector.FILTER_EFFWAVE), sb).append(" ");
443+
}
444+
if (selector.hasFilter(Selector.FILTER_EFFBAND)) {
445+
sb.append("-").append(Selector.FILTER_EFFBAND).append(" ");
446+
dumpRanges(selector.getFilter(Selector.FILTER_EFFBAND), sb).append(" ");
447+
}
448+
449+
// convert generic filters from selector.filters (1D)
450+
for (Map.Entry<String, List<?>> e : selector.getFiltersMap().entrySet()) {
451+
if (!Selector.isCustomFilter(e.getKey())) {
452+
sb.append("-").append(e.getKey()).append(" ");
453+
dumpRanges((List<Range>) e.getValue(), sb).append(" ");
454+
}
455+
}
456+
return sb.toString();
422457
}
423458
return "";
424459
}

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

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,15 @@
2020
package fr.jmmc.oitools.fits;
2121

2222
import fr.jmmc.jmcs.util.NumberUtils;
23+
import fr.jmmc.jmcs.util.StringUtils;
2324
import fr.jmmc.oitools.OIFitsConstants;
2425
import static fr.jmmc.oitools.meta.CellMeta.NO_STR_VALUES;
2526
import fr.jmmc.oitools.meta.KeywordMeta;
2627
import fr.jmmc.oitools.meta.Types;
2728
import fr.jmmc.oitools.model.ModelBase;
2829
import fr.jmmc.oitools.model.OIFitsChecker;
2930
import fr.jmmc.oitools.model.Rule;
31+
import fr.nom.tam.fits.HeaderCard;
3032
import java.text.ParseException;
3133
import java.text.SimpleDateFormat;
3234
import java.util.ArrayList;
@@ -612,10 +614,34 @@ public final boolean removeFirstHeaderCard(final String key) {
612614

613615
/**
614616
* Add a new extra HISTORY keyword (header card)
615-
* @param comment header card comment
617+
* @param value value for HISTORY
616618
*/
617-
public final void addHeaderHistory(final String comment) {
618-
addHeaderCard(FitsConstants.KEYWORD_HISTORY, null, comment);
619+
public final void addHeaderHistory(final String value) {
620+
final String altValue = StringUtils.cleanWhiteSpaces(value);
621+
622+
if (!StringUtils.isEmpty(altValue)) {
623+
final int maxLen = HeaderCard.MAX_VALUE_LENGTH;
624+
if (altValue.length() <= maxLen) {
625+
addHeaderCard(FitsConstants.KEYWORD_HISTORY, null, altValue);
626+
} else {
627+
// use multiple keywords:
628+
String remain = altValue;
629+
int len = remain.length();
630+
do {
631+
final String current;
632+
if (len > maxLen) {
633+
current = remain.substring(0, maxLen);
634+
remain = remain.substring(maxLen);
635+
len -= maxLen;
636+
} else {
637+
current = remain;
638+
remain = "";
639+
len = 0;
640+
}
641+
addHeaderCard(FitsConstants.KEYWORD_HISTORY, null, current);
642+
} while (len > 0);
643+
}
644+
}
619645
}
620646

621647
/**

src/main/java/fr/jmmc/oitools/model/OIFitsCollection.java

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -533,7 +533,7 @@ public SelectorResult findOIData(final Selector selector, final SelectorResult i
533533

534534
// convert generic filters from selector.filters (1D)
535535
for (Map.Entry<String, List<?>> e : selector.getFiltersMap().entrySet()) {
536-
if (!isCustomFilter(e.getKey())) {
536+
if (!Selector.isCustomFilter(e.getKey())) {
537537
filtersData1D.add(new Double1DFilter(e.getKey(), (List<Range>) e.getValue()));
538538
}
539539
}
@@ -546,7 +546,7 @@ public SelectorResult findOIData(final Selector selector, final SelectorResult i
546546

547547
// convert generic filters from selector.filters (WAVELENGTH)
548548
for (Map.Entry<String, List<?>> e : selector.getFiltersMap().entrySet()) {
549-
if (isFilterOnWavelengths(e.getKey())) {
549+
if (Selector.isCustomFilterOnWavelengths(e.getKey())) {
550550
filtersWL.add(new Double1DFilter(e.getKey(), (List<Range>) e.getValue()));
551551
}
552552
}
@@ -854,25 +854,4 @@ private List<Granule> findGranules(final Selector selector) {
854854
}
855855
return granules;
856856
}
857-
858-
private static boolean isCustomFilter(final String name) {
859-
switch (name) {
860-
case Selector.FILTER_STAINDEX:
861-
case Selector.FILTER_STACONF:
862-
case Selector.FILTER_MJD:
863-
return true;
864-
default:
865-
return isFilterOnWavelengths(name);
866-
}
867-
}
868-
869-
private static boolean isFilterOnWavelengths(final String name) {
870-
switch (name) {
871-
case Selector.FILTER_EFFWAVE:
872-
case Selector.FILTER_EFFBAND:
873-
return true;
874-
default:
875-
return false;
876-
}
877-
}
878857
}

src/main/java/fr/jmmc/oitools/processing/Selector.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@
2828
*/
2929
public final class Selector {
3030

31+
public final static String FILTER_TARGET_ID = OIFitsConstants.COLUMN_TARGET_ID;
32+
public final static String FILTER_NIGHT_ID = OIFitsConstants.COLUMN_NIGHT_ID;
33+
3134
public final static String FILTER_EFFWAVE = OIFitsConstants.COLUMN_EFF_WAVE;
3235
public final static String FILTER_EFFBAND = OIFitsConstants.COLUMN_EFF_BAND;
3336

@@ -142,4 +145,27 @@ public String toString() {
142145
+ ']';
143146
}
144147

148+
public static boolean isCustomFilter(final String name) {
149+
switch (name) {
150+
case Selector.FILTER_TARGET_ID:
151+
case Selector.FILTER_NIGHT_ID:
152+
case Selector.FILTER_STAINDEX:
153+
case Selector.FILTER_STACONF:
154+
case Selector.FILTER_MJD:
155+
return true;
156+
default:
157+
return isCustomFilterOnWavelengths(name);
158+
}
159+
}
160+
161+
public static boolean isCustomFilterOnWavelengths(final String name) {
162+
switch (name) {
163+
case Selector.FILTER_EFFWAVE:
164+
case Selector.FILTER_EFFBAND:
165+
return true;
166+
default:
167+
return false;
168+
}
169+
}
170+
145171
}

0 commit comments

Comments
 (0)