package basextest;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.concurrent.atomic.AtomicBoolean;
import org.basex.api.client.LocalSession;
import org.basex.api.client.Session;
import org.basex.core.Context;
import org.basex.core.cmd.Add;
import org.basex.core.cmd.CreateDB;
import org.basex.core.cmd.CreateUser;
import org.basex.core.cmd.Grant;
import org.basex.core.cmd.Open;

public class BaseXTestAdd {

    public static void main(String[] args) throws IOException {
        final AtomicBoolean goOn = new AtomicBoolean(true);

        final Context ctx = new Context();
        new CreateUser("user", "").execute(ctx);

        for (int d = 0; d < 250; d++) {
            final String dbname = "doc" + d;
            new CreateDB(dbname).execute(ctx);
            new Grant("write", "user", dbname).execute(ctx);

            new Thread() {

                @Override
                public void run() {
                    int size = 0;

                    try (Session session = new LocalSession(ctx, "user", "")) {
                        session.execute(new Open(dbname));

                        while (goOn.get()) {
                            session.execute(new Add(dbname, "<root><elem1></elem1></root>"));
                            size++;
                        }
                    }
                    catch (Exception ex) {
                        System.out.println("In thread [" + Thread.currentThread().getId() + "] writing to db [" + dbname + "]. Nb Element written: [" + size + "]");
                        ex.printStackTrace();
                        System.exit(1);
                    }
                }
            }.start();
        }

        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        bufferedReader.readLine();
        goOn.set(false);
    }
}