Esempio n. 1
0
 @Override
 public Value value(final QueryContext qc) throws QueryException {
   final ArrayList<User> users = qc.context.users.users(null, qc.context);
   final TokenList tl = new TokenList(users.size());
   for (final User user : users) tl.add(user.name());
   return StrSeq.get(tl);
 }
Esempio n. 2
0
  @Override
  public Iter iter(final QueryContext qc) throws QueryException {
    final int el = exprs.length;
    if (el == 0) {
      final TokenList tl = new TokenList();
      for (final String s : qc.context.databases.listDBs()) tl.add(s);
      return StrSeq.get(tl).iter();
    }

    final Data data = checkData(qc);
    final String path = string(exprs.length == 1 ? Token.EMPTY : toToken(exprs[1], qc));
    final IntList il = data.resources.docs(path);
    final TokenList tl = data.resources.binaries(path);
    return new Iter() {
      final int is = il.size(), ts = tl.size();
      int ip, tp;

      @Override
      public Str get(final long i) {
        return i < is
            ? Str.get(data.text(il.get((int) i), true))
            : i < is + ts ? Str.get(tl.get((int) i - is)) : null;
      }

      @Override
      public Str next() {
        return ip < is ? get(ip++) : tp < ts ? get(ip + tp++) : null;
      }

      @Override
      public long size() {
        return is + ts;
      }
    };
  }
Esempio n. 3
0
  /**
   * Evaluates the tokenize function.
   *
   * @param ctx query context
   * @return function result
   * @throws QueryException query exception
   */
  private Value tokenize(final QueryContext ctx) throws QueryException {
    final byte[] val = checkEStr(expr[0], ctx);
    final Pattern p = pattern(expr[1], expr.length == 3 ? expr[2] : null, ctx);
    if (p.matcher("").matches()) REGROUP.thrw(info);

    final TokenList tl = new TokenList();
    final String str = string(val);
    if (!str.isEmpty()) {
      final Matcher m = p.matcher(str);
      int s = 0;
      while (m.find()) {
        tl.add(str.substring(s, m.start()));
        s = m.end();
      }
      tl.add(str.substring(s, str.length()));
    }
    return StrSeq.get(tl);
  }
Esempio n. 4
0
  @Override
  public B64 item(final QueryContext qc, final InputInfo ii) throws QueryException {
    checkCreate(qc);

    final IOFile root = new IOFile(toPath(0, qc).toString());
    final ArchOptions opts = toOptions(1, Q_OPTIONS, new ArchOptions(), qc);
    final Iter entries;
    if (exprs.length > 2) {
      entries = qc.iter(exprs[2]);
    } else {
      final TokenList tl = new TokenList();
      for (final String file : root.descendants()) tl.add(file);
      entries = StrSeq.get(tl).iter();
    }

    final String format = opts.get(ArchOptions.FORMAT);
    final int level = level(opts);
    if (!root.isDir()) throw FILE_NO_DIR_X.get(info, root);

    try (final ArchiveOut out = ArchiveOut.get(format.toLowerCase(Locale.ENGLISH), info)) {
      out.level(level);
      try {
        while (true) {
          Item en = entries.next();
          if (en == null) break;
          en = checkElemToken(en);
          final IOFile file = new IOFile(root, string(en.string(info)));
          if (!file.exists()) throw FILE_NOT_FOUND_X.get(info, file);
          if (file.isDir()) throw FILE_IS_DIR_X.get(info, file);
          add(en, new B64(file.read()), out, level, qc);
        }
      } catch (final IOException ex) {
        throw ARCH_FAIL_X.get(info, ex);
      }
      return new B64(out.finish());
    }
  }
Esempio n. 5
0
 /**
  * Creates a container for the specified string.
  *
  * @param strings string
  * @return iterator
  */
 protected static Value strings(final String... strings) {
   final TokenList tl = new TokenList(strings.length);
   for (final String s : strings) tl.add(s);
   return StrSeq.get(tl.finish());
 }