Example #1
0
bool gt_script_filter_validate(GtScriptFilter *script_filter, GtError *err)
{
  const char *result;

#ifndef NDEBUG
  GT_UNUSED int stack_size;
#endif
  gt_assert(script_filter);
  gt_error_check(err);

#ifndef NDEBUG
  stack_size = lua_gettop(script_filter->L);
#endif

  result = gt_script_filter_get_name(script_filter, err);
  if (result == gt_symbol("undefined")) {
    gt_error_set(err, "metadata 'name' not found");
    return false;
  }
  result = gt_script_filter_get_description(script_filter, err);
  if (result == gt_symbol("undefined")) {
    gt_error_set(err, "metadata 'description' not found");
    return false;
  }
  result = gt_script_filter_get_short_description(script_filter, err);
  if (result == gt_symbol("undefined")) {
    gt_error_set(err, "metadata 'short_descr' not found");
    return false;
  }
  result = gt_script_filter_get_author(script_filter, err);
  if (result == gt_symbol("undefined")) {
    gt_error_set(err, "metadata 'author' not found");
    return false;
  }
  result = gt_script_filter_get_email(script_filter, err);
  if (result == gt_symbol("undefined")) {
    gt_error_set(err, "metadata 'email' not found");
    return false;
  }
  result = gt_script_filter_get_version(script_filter, err);
  if (result == gt_symbol("undefined")) {
    gt_error_set(err, "metadata 'version' not found");
    return false;
  }

  lua_getglobal(script_filter->L, "filter");
  if (lua_isnil(script_filter->L, -1)) {
    gt_error_set(err, "function 'filter' is not defined");
    lua_pop(script_filter->L, 1);
    return false;
  }
  return true;
}
static int gt_script_filter_runner(int argc, const char **argv, int parsed_args,
                                   void *tool_arguments, GT_UNUSED GtError *err)
{
  GtScriptFilterArguments *arguments = tool_arguments;
  int had_err = 0;
  GtUword i;

  gt_error_check(err);
  gt_assert(arguments);

  for (i = parsed_args; !had_err && i < argc; i++) {
    GtScriptFilter *sf = NULL;
    sf = gt_script_filter_new(argv[i], err);
    if (!sf) {
      had_err = -1;
      break;
    } else {
      if (arguments->showinfo) {
        if (arguments->oneline) {
          const char *name,
                     *version,
                     *author;

          if (!(name = gt_script_filter_get_name(sf, err)))
            had_err = -1;

          if (!had_err) {
            if (!(version = gt_script_filter_get_version(sf, err)))
              had_err = -1;
          }

          if (!had_err) {
            if (!(author = gt_script_filter_get_author(sf, err)))
              had_err = -1;
          }

          if (!had_err) {
            printf("%s v%s (by %s)\n", name, version, author);
          }
        } else {
          const char *out;

          if (arguments->scriptname)
            printf("script name:\t%s\n", argv[i]);

          out = gt_script_filter_get_name(sf, err);
          if (out)
            printf("filter name:\t%s\n", out);
          else
            had_err = -1;

          if (!had_err) {
            out = gt_script_filter_get_version(sf, err);
            if (out)
              printf("version:\t%s\n", out);
            else
              had_err = -1;
          }

          if (!had_err) {
            out = gt_script_filter_get_author(sf, err);
            if (out)
              printf("author:\t\t%s\n", out);
            else
              had_err = -1;
          }

          if (!had_err) {
            out = gt_script_filter_get_email(sf, err);
            if (out)
              printf("email:\t\t%s\n", out);
            else
              had_err = -1;
          }

          if (!had_err) {
            out = gt_script_filter_get_description(sf, err);
            if (out)
              printf("description:\t%s\n", out);
            else
              had_err = -1;
          }

          if (i != argc-1)
            printf("\n");
        }
      }
      if (arguments->validate) {
        GT_UNUSED bool select;
        GtStr *seqid = gt_str_new_cstr("foo");
        GtFeatureNode *fn = (GtFeatureNode*) gt_feature_node_new(seqid, "gene",
                                                             23, 42,
                                                             GT_STRAND_FORWARD);
        had_err = gt_script_filter_run(sf, fn, &select, err);
        gt_genome_node_delete((GtGenomeNode*) fn);
        gt_str_delete(seqid);
      }
      gt_script_filter_delete(sf);
    }
  }

  return had_err;
}