package org.basex.gui.dialog; import static org.basex.core.Text.*; import java.awt.BorderLayout; import org.basex.core.cmd.*; import org.basex.data.MetaData; import org.basex.gui.GUIConstants.Fill; import org.basex.gui.GUIConstants.Msg; import org.basex.gui.layout.BaseXBack; import org.basex.gui.layout.BaseXButton; 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; /** * Panel for adding new resources. * * @author BaseX Team 2005-12, BSD License * @author Lukas Kircher */ class DialogAdd extends BaseXBack { /** Dialog reference. */ final DialogProps dialog; /** Target path. */ final BaseXTextField target; /** General options. */ private final DialogImport general; /** Add button. */ private final BaseXButton add; /** Optimize button. */ private final BaseXButton optimize; /** * Constructor. * @param d dialog reference */ public DialogAdd(final DialogProps d) { dialog = d; setLayout(new BorderLayout()); target = new BaseXTextField("/", d); target.addKeyListener(d.keys); final BaseXBack pnl = new BaseXBack(new TableLayout(2, 1)); pnl.add(new BaseXLabel(TARGET_PATH + COLS, true, true).border(12, 0, 6, 0)); pnl.add(target); // option panels final DialogParsing parsing = new DialogParsing(d); general = new DialogImport(d, pnl, parsing); final BaseXTabs tabs = new BaseXTabs(d); tabs.addTab(GENERAL, general); tabs.addTab(PARSING, parsing); add(tabs, BorderLayout.NORTH); // buttons add = new BaseXButton(ADD + DOTS, d); optimize = new BaseXButton(OPTIMIZE + DOTS, d); final BaseXBack buttons = new BaseXBack(Fill.NONE); buttons.add(add); buttons.add(optimize); final BaseXBack btn = new BaseXBack(Fill.NONE).layout(new BorderLayout()); btn.add(buttons, BorderLayout.EAST); add(btn, BorderLayout.EAST); } /** * Reacts on user input. * @param comp the action component */ void action(final Object comp) { final String src = general.input(); final String trg = target.getText().trim(); if(comp == add) { general.setOptions(); final Runnable run = new Runnable() { @Override public void run() { dialog.resources.refreshNewFolder(trg); } }; DialogProgress.execute(dialog, "", run, new Add(trg, src)); } else if (comp == optimize) { DialogProgress.execute(dialog, "", new Optimize()); } else if (comp == general.browse) { target.setText(general.dbname); } else { boolean ok = general.action(comp, false); String inf = !ok ? FILE_NOT_FOUND : !ok ? ENTER_DB_NAME : null; final Msg icon = Msg.ERROR; if(ok) { // check if target path is valid ok = MetaData.normPath(trg) != null; if(!ok) inf = Util.info(INVALID_X, TARGET_PATH); } general.info.setText(inf, icon); add.setEnabled(ok); optimize.setEnabled(!dialog.gui.context.data().meta.uptodate); } } }