3030import java .io .IOException ;
3131import java .util .ArrayList ;
3232import 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 }
0 commit comments