package org.basex.gui.dialog; import static org.basex.core.Text.*; import static org.basex.gui.layout.BaseXKeys.*; import java.awt.BorderLayout; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; 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.layout.BaseXBack; import org.basex.gui.layout.BaseXLabel; import org.basex.gui.layout.BaseXTextField; import org.basex.util.Util; import org.basex.util.list.StringList; /** * Rename database/drop documents dialog. * * @author BaseX Team 2005-12, BSD License * @author Christian Gruen */ public final class DialogInput extends Dialog { /** User input. */ private final BaseXTextField input; /** Old input. */ private final String old; /** Buttons. */ private final BaseXBack buttons; /** Info label. */ private final BaseXLabel info; /** Available databases. */ private final StringList db; /** Rename/copy/delete dialog. */ private final int type; /** * Default constructor. * @param o old input * @param tit title string * @param main reference to the main window * @param t type of dialog (rename database/copy database/drop documents) */ public DialogInput(final String o, final String tit, final GUI main, final int t) { super(main, tit); old = o; db = List.list(main.context); type = t; String title = ""; if(type == 0) { title = TARGET_PATH + COLS; } else if(type == 1) { title = NAME_OF_DB + COLS; } else if(type == 2) { title = NAME_OF_DB_COPY + COLS; } set(new BaseXLabel(title, false, true).border(0, 0, 6, 0), BorderLayout.NORTH); input = new BaseXTextField(o, this); input.addKeyListener(new KeyAdapter() { @Override public void keyReleased(final KeyEvent e) { if(!modifier(e)) action(ENTER.is(e) ? e.getSource() : null); } }); info = new BaseXLabel(" "); final BaseXBack p = new BaseXBack(new BorderLayout(0, 8)); p.add(input, BorderLayout.NORTH); p.add(info, BorderLayout.CENTER); set(p, BorderLayout.CENTER); buttons = newButtons(B_OK, B_CANCEL); set(buttons, BorderLayout.SOUTH); action(null); finish(null); } /** * Returns the user input. * @return input */ public String input() { return input.getText().trim(); } @Override public void action(final Object cmp) { final String in = input(); String msg = null; ok = type != 0 && (db.contains(in) || in.equals(old)); if(ok) msg = Util.info(DB_EXISTS_X, in); if(!ok) { ok = type == 0 ? MetaData.normPath(in) != null : MetaData.validName(in, false); if(!ok) msg = in.isEmpty() ? ENTER_DB_NAME : Util.info(INVALID_X, NAME); } info.setText(msg, type == 1 || type == 2 ? Msg.ERROR : Msg.WARN); enableOK(buttons, B_OK, ok); } @Override public void close() { if(ok) super.close(); } }