package org.basex.core.cmd;
import static org.basex.core.Text.*;
import java.io.IOException;
import org.basex.core.CommandBuilder;
import org.basex.core.Prop;
import org.basex.core.User;
import org.basex.core.Commands.Cmd;
import org.basex.core.Commands.CmdCreate;
import org.basex.core.Commands.CmdIndex;
import org.basex.data.Data;
import org.basex.data.MemData;
import org.basex.index.IndexToken.IndexType;
import org.basex.util.Util;
import org.basex.util.ft.Language;
/**
* Evaluates the 'create db' command and creates a new index.
*
* @author BaseX Team 2005-12, BSD License
* @author Christian Gruen
*/
public final class CreateIndex extends ACreate {
/**
* Default constructor.
* @param type index type, defined in {@link CmdIndex}
*/
public CreateIndex(final Object type) {
super(DATAREF | User.WRITE, type != null ? type.toString() : null);
}
@Override
protected boolean run() {
final Data data = context.data();
if(data instanceof MemData) return error(NO_MAINMEM);
try {
final IndexType index;
final CmdIndex ci = getOption(CmdIndex.class);
switch(ci) {
case TEXT:
data.meta.createtext = true;
index = IndexType.TEXT;
break;
case ATTRIBUTE:
data.meta.createattr = true;
index = IndexType.ATTRIBUTE;
break;
case FULLTEXT:
data.meta.createftxt = true;
data.meta.wildcards = prop.is(Prop.WILDCARDS);
data.meta.stemming = prop.is(Prop.STEMMING);
data.meta.casesens = prop.is(Prop.CASESENS);
data.meta.diacritics = prop.is(Prop.DIACRITICS);
data.meta.scoring = prop.num(Prop.SCORING);
data.meta.language = Language.get(prop);
index = IndexType.FULLTEXT;
break;
case PATH:
data.meta.createpath = true;
index = IndexType.PATH;
break;
default:
return error(UNKNOWN_CMD_X, this);
}
create(index, data, this);
data.flush();
return info(INDEX_CREATED_X_X, index, perf);
} catch(final IOException ex) {
Util.debug(ex);
return error(ex.getMessage());
}
}
@Override
public void build(final CommandBuilder cb) {
cb.init(Cmd.CREATE + " " + CmdCreate.INDEX).args();
}
}