!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 ]
    }