package org.basex.core.cmd; import static org.basex.core.Text.*; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import org.basex.core.CommandBuilder; import org.basex.core.Commands.Cmd; import org.basex.core.Commands.CmdInfo; import org.basex.core.User; import org.basex.data.MetaData; import org.basex.util.Performance; import org.basex.util.TokenBuilder; import org.basex.util.Util; /** * Evaluates the 'info database' command and returns information on the * currently opened database. * * @author BaseX Team 2005-12, BSD License * @author Christian Gruen */ public final class InfoDB extends AInfo { /** Date format. */ public static final SimpleDateFormat DATE = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss"); /** * Default constructor. */ public InfoDB() { super(DATAREF | User.READ); } @Override protected boolean run() throws IOException { final boolean create = context.user.perm(User.CREATE); out.print(db(context.data().meta, false, true, create)); return true; } /** * Creates a database information string. * @param meta meta data * @param bold header bold header flag * @param index add index information * @param create create permissions * @return info string */ public static String db(final MetaData meta, final boolean bold, final boolean index, final boolean create) { final TokenBuilder tb = new TokenBuilder(); final String header = (bold ? new TokenBuilder().bold().add('%').norm().toString() : "%") + NL; tb.addExt(header, DB_PROPS); format(tb, NAME, meta.name); format(tb, SIZE, Performance.format(meta.dbsize())); format(tb, NODES, Integer.toString(meta.size)); // count number of raw files final int bin = meta.binaries().descendants().size(); format(tb, DOCUMENTS, Integer.toString(meta.ndocs)); format(tb, BINARIES, Integer.toString(bin)); format(tb, TIMESTAMP, DATE.format(new Date(meta.dbtime()))); if(meta.corrupt) tb.add(' ' + DB_CORRUPT + NL); tb.add(NL).addExt(header, RESOURCE_PROPS); if(create && !meta.original.isEmpty()) format(tb, INPUT_PATH, meta.original); if(meta.filesize != 0) format(tb, INPUT_SIZE, Performance.format(meta.filesize)); format(tb, TIMESTAMP, DATE.format(new Date(meta.time))); format(tb, ENCODING, meta.encoding); format(tb, WS_CHOPPING, Util.flag(meta.chop)); if(index) { tb.add(NL).addExt(header, INDEXES); if(meta.oldindex) { tb.add(' ' + H_INDEX_FORMAT + NL); } else { format(tb, UP_TO_DATE, String.valueOf(meta.uptodate)); format(tb, PATH_INDEX, Util.flag(meta.pathindex)); format(tb, TEXT_INDEX, Util.flag(meta.textindex)); format(tb, ATTRIBUTE_INDEX, Util.flag(meta.attrindex)); format(tb, FULLTEXT_INDEX, Util.flag(meta.ftxtindex) + (meta.ftxtindex && meta.wildcards ? " (" + WILDCARDS + ')' : "")); } } return tb.toString(); } @Override public void build(final CommandBuilder cb) { cb.init(Cmd.INFO + " " + CmdInfo.DB); } }