package org.basex.gui.dialog; import static org.basex.core.Text.*; import java.awt.BorderLayout; import org.basex.core.Prop; import org.basex.core.cmd.List; import org.basex.data.MetaData; import org.basex.gui.GUI; import org.basex.gui.GUIConstants.Msg; import org.basex.gui.GUIProp; import org.basex.gui.layout.BaseXBack; import org.basex.gui.layout.BaseXCheckBox; import org.basex.gui.layout.BaseXLabel; import org.basex.gui.layout.BaseXTabs; import org.basex.gui.layout.BaseXTextField; import org.basex.gui.layout.TableLayout; import org.basex.util.Util; import org.basex.util.list.StringList; /** * Dialog window for specifying options for creating a new database. * * @author BaseX Team 2005-12, BSD License * @author Christian Gruen */ public final class DialogNew extends Dialog { /** Buttons. */ private final DialogImport general; /** Database name. */ private final BaseXTextField target; /** Buttons. */ private final BaseXBack buttons; /** Path summary flag. */ private final BaseXCheckBox pathindex; /** Text index flag. */ private final BaseXCheckBox txtindex; /** Attribute value index flag. */ private final BaseXCheckBox atvindex; /** Full-text index flag. */ private final BaseXCheckBox ftxindex; /** Editable full-text options. */ private final DialogFT ft; /** Available databases. */ private final StringList db; /** * Default constructor. * @param main reference to the main window */ public DialogNew(final GUI main) { super(main, CREATE_DATABASE); // define buttons first to assign simplest mnemonics buttons = okCancel(); db = List.list(main.context); final Prop prop = gui.context.prop; final GUIProp gprop = main.gprop; target = new BaseXTextField(gprop.get(GUIProp.CREATENAME), this); target.addKeyListener(keys); final BaseXBack pnl = new BaseXBack(new TableLayout(2, 1)); pnl.add(new BaseXLabel(NAME_OF_DB + COLS, false, true).border(12, 0, 6, 0)); pnl.add(target); // option panels final DialogParsing parsing = new DialogParsing(this); general = new DialogImport(this, pnl, parsing); // index panel final BaseXBack indexes = new BaseXBack(new TableLayout(6, 1, 0, 0)).border(8); //indexes.add(new BaseXLabel(INDEXES).border(0, 0, 16, 0).large()); pathindex = new BaseXCheckBox(PATH_INDEX, prop.is(Prop.PATHINDEX), 0, this).large();; indexes.add(pathindex); indexes.add(new BaseXLabel(H_PATH_INDEX, true, false)); txtindex = new BaseXCheckBox(TEXT_INDEX, prop.is(Prop.TEXTINDEX), 0, this).large();; indexes.add(txtindex); indexes.add(new BaseXLabel(H_TEXT_INDEX, true, false)); atvindex = new BaseXCheckBox(ATTRIBUTE_INDEX, prop.is(Prop.ATTRINDEX), 0, this).large(); indexes.add(atvindex); indexes.add(new BaseXLabel(H_ATTR_INDEX, true, false)); // full-text panel final BaseXBack fulltext = new BaseXBack(new TableLayout(2, 1, 0, 0)).border(8); ftxindex = new BaseXCheckBox(FULLTEXT_INDEX, prop.is(Prop.FTINDEX), 0, this).large(); fulltext.add(ftxindex); ft = new DialogFT(this, true); fulltext.add(ft); final BaseXTabs tabs = new BaseXTabs(this); tabs.addTab(GENERAL, general); tabs.addTab(PARSING, parsing); tabs.addTab(INDEXES, indexes); tabs.addTab(FULLTEXT, fulltext); set(tabs, BorderLayout.CENTER); set(buttons, BorderLayout.SOUTH); action(null); finish(null); } @Override public void action(final Object cmp) { final boolean valid = general.action(cmp, true); ft.action(); // ...must be located before remaining checks if(cmp == general.browse) target.setText(general.dbname); final String nm = target.getText().trim(); ok = valid && !nm.isEmpty(); String inf = !valid ? FILE_NOT_FOUND : !ok ? ENTER_DB_NAME : null; Msg icon = Msg.ERROR; if(ok) { ok = MetaData.validName(nm, false); if(ok) gui.gprop.set(GUIProp.CREATENAME, nm); if(!ok) { // name of database is invalid inf = Util.info(INVALID_X, NAME); } else if(general.input.getText().trim().isEmpty()) { // database will be empty inf = EMPTY_DB; icon = Msg.WARN; } else if(db.contains(nm)) { // old database will be overwritten inf = OVERWRITE_DB; icon = Msg.WARN; } } general.info.setText(inf, icon); enableOK(buttons, B_OK, ok); } @Override public void close() { if(!ok) return; super.close(); gui.set(Prop.PATHINDEX, pathindex.isSelected()); gui.set(Prop.TEXTINDEX, txtindex.isSelected()); gui.set(Prop.ATTRINDEX, atvindex.isSelected()); gui.set(Prop.FTINDEX, ftxindex.isSelected()); general.setOptions(); ft.setOptions(); } }