/** * Opens the specified database. * * @param name name of database * @param ctx database context * @return data reference * @throws IOException I/O exception */ public static Data open(final String name, final Context ctx) throws IOException { synchronized (ctx.dbs) { Data data = ctx.dbs.pin(name); if (data == null) { // check if database exists if (!ctx.globalopts.dbexists(name)) throw new BaseXException(dbnf(name)); data = new DiskData(name, ctx); ctx.dbs.add(data); } // check permissions if (!ctx.perm(Perm.READ, data.meta)) { Close.close(data, ctx); throw new BaseXException(PERM_REQUIRED_X, Perm.READ); } return data; } }
/** * Lists resources of the specified database. * * @return success flag * @throws IOException I/O exception */ private boolean listDB() throws IOException { final String db = args[0]; final String path = args[1] != null ? args[1] : ""; if (!Databases.validName(db)) return error(NAME_INVALID_X, db); final Table table = new Table(); table.description = RESOURCES; table.header.add(INPUT_PATH); table.header.add(TYPE); table.header.add(MimeTypes.CONTENT_TYPE); table.header.add(SIZE); try { // add xml documents final Data data = Open.open(db, context); final Resources res = data.resources; final IntList il = res.docs(path); final int ds = il.size(); for (int i = 0; i < ds; i++) { final int pre = il.get(i); final TokenList tl = new TokenList(3); final byte[] file = data.text(pre, true); tl.add(file); tl.add(DataText.M_XML); tl.add(MimeTypes.APP_XML); tl.add(data.size(pre, Data.DOC)); table.contents.add(tl); } // add binary resources for (final byte[] file : res.binaries(path)) { final String f = string(file); final TokenList tl = new TokenList(3); tl.add(file); tl.add(DataText.M_RAW); tl.add(MimeTypes.get(f)); tl.add(data.meta.binary(f).length()); table.contents.add(tl); } Close.close(data, context); } catch (final IOException ex) { return error(Util.message(ex)); } out.println(table.sort().finish()); return true; }