package water.rapids.ast.prims.misc; import water.Futures; import water.Key; import water.KeySnapshot; import water.fvec.AppendableVec; import water.fvec.Frame; import water.fvec.NewChunk; import water.fvec.Vec; import water.rapids.Env; import water.rapids.Val; import water.rapids.vals.ValFrame; import water.rapids.ast.AstPrimitive; import water.rapids.ast.AstRoot; import java.util.ArrayList; /** * R 'ls' command. * <p/> * This method is purely for the console right now. Print stuff into the string buffer. * JSON response is not configured at all. */ public class AstLs extends AstPrimitive { @Override public String[] args() { return null; } @Override public int nargs() { return 1; } @Override public String str() { return "ls"; } @Override public ValFrame apply(Env env, Env.StackHelp stk, AstRoot asts[]) { ArrayList<String> domain = new ArrayList<>(); Futures fs = new Futures(); AppendableVec av = new AppendableVec(Vec.VectorGroup.VG_LEN1.addVec(), Vec.T_CAT); NewChunk keys = new NewChunk(av, 0); int r = 0; for (Key key : KeySnapshot.globalSnapshot().keys()) { keys.addCategorical(r++); domain.add(key.toString()); } String[] key_domain = domain.toArray(new String[domain.size()]); av.setDomain(key_domain); keys.close(fs); Vec c0 = av.layout_and_close(fs); // c0 is the row index vec fs.blockForPending(); return new ValFrame(new Frame(Key.<Frame>make("h2o_ls"), new String[]{"key"}, new Vec[]{c0})); } }