!config
# Arara, the cool TeX automation tool
# Copyright (c) 2023, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: datatooltk
name: DatatoolTk
authors:
- Island of TeX
commands:
- name: The DatatoolTk software
 command: >
   @{
       return getCommand('datatooltk', options, output, csv, sql, input,
              sqldb, sqluser, name, probsoln, sort, sortlocale, sortcase,
              seed, shuffle, sep, delim, csvheader, noconsole, debug,
              owneronly, maptex, xls, ods, sheet, filterop, filters,
              truncate);
   }
arguments:
- identifier: options
 flag: >
   @{
       if (isList(parameters.options)) {
           return parameters.options;
       }
       else {
           throwError('I was expecting a list of options.');
       }
   }
- identifier: output
 flag: >
   @{
       [ '--output', parameters.output ]
   }
 required: true
- identifier: csv
 flag: >
   @{
       [ '--csv', parameters.csv ]
   }
- identifier: sep
 flag: >
   @{
       [ '--sep', parameters.sep ]
   }
- identifier: delim
 flag: >
   @{
       [ '--delim', parameters.delim ]
   }
- identifier: name
 flag: >
   @{
       [ '--name', parameters.name ]
   }
- identifier: sql
 flag: >
   @{
       [ '--sql', parameters.sql ]
   }
- identifier: sqldb
 flag: >
   @{
       [ '--sqldb', parameters.sqldb ]
   }
- identifier: sqluser
 flag: >
   @{
       [ '--sqluser', parameters.sqluser ]
   }
- identifier: noconsole
 flag: >
   @{
       [ '--noconsole-action', isEmpty(parameters.noconsole, 'gui', parameters.noconsole) ]
   }
 default: ''
- identifier: probsoln
 flag: >
   @{
       [ '--probsoln', parameters.probsoln ]
   }
- identifier: input
 flag: >
   @{
       [ '--in', parameters.input ]
   }
- identifier: sort
 flag: >
   @{
       [ '--sort', parameters.sort ]
   }
- identifier: sortlocale
 flag: >
   @{
       [ '--sort-locale', parameters.sortlocale ]
   }
- identifier: sortcase
 flag: >
   @{
       isTrue(parameters.sortcase, '--sort-case-sensitive',
              '--sort-case-insensitive')
   }
- identifier: seed
 flag: >
   @{
       [ '--seed', parameters.seed ]
   }
- identifier: shuffle
 flag: >
   @{
       isTrue(parameters.shuffle, '--shuffle', '--noshuffle')
   }
- identifier: csvheader
 flag: >
   @{
       isTrue(parameters.csvheader, '--csvheader', '--nocsvheader')
   }
- identifier: debug
 flag: >
   @{
       isTrue(parameters.debug, '--debug', '--nodebug')
   }
- identifier: owneronly
 flag: >
   @{
       isTrue(parameters.owneronly, '--owner-only', '--noowner-only')
   }
- identifier: maptex
 flag: >
   @{
       isTrue(parameters.maptex, '--map-tex-specials',
              '--nomap-tex-specials')
   }
- identifier: xls
 flag: >
   @{
       [ '--xls', parameters.xls ]
   }
- identifier: ods
 flag: >
   @{
       [ '--ods', parameters.ods ]
   }
- identifier: sheet
 flag: >
   @{
       [ '--sheet', parameters.sheet ]
   }
- identifier: filterop
 flag: >
   @{
      if (['and', 'or'].contains(parameters.filterop)) {
         return "--filter-" + parameters.filterop;
      }
      else {
         throwError('The provided filterop value is not valid.');
      }
   }
- identifier: filters
 flag: >
   @{
       if (isList(parameters.filters)) {
         elements = [];
         foreach (element : parameters.filters) {
            if (isList(element) && element.size() == 3) {
               elements.add('--filter');
               elements.add(element);
            }
            else {
               throwError('I was expecting a filter ' +
                          'list [<label>, <op>, <value>]');
            }
         }
         return elements;
       }
       else {
           throwError('I was expecting filters: [ [<label>, <op>, <value>], ' +
                      '..., [<label>, <op>, <value>] ].');
       }
   }
- identifier: truncate
 flag: >
   @{
       [ '--truncate', parameters.truncate ]
   }