package org.basex.data;
import java.util.*;
import org.basex.util.*;
/**
* This class provides meta properties.
*
* @author BaseX Team 2005-17, BSD License
* @author Christian Gruen
*/
public enum MetaProp {
/** Property. */
NAME(false) {
@Override
public String value(final MetaData meta) { return meta.name; }
},
/** Property. */
SIZE(false) {
@Override
public Long value(final MetaData meta) { return meta.dbsize(); }
},
/** Property. */
NODES(false) {
@Override
public Integer value(final MetaData meta) { return meta.size; }
},
/** Property. */
DOCUMENTS(false) {
@Override
public Integer value(final MetaData meta) { return meta.ndocs; }
},
/** Property. */
BINARIES(false) {
@Override
public Integer value(final MetaData meta) {
return meta.path != null ? meta.binaries().descendants().size() : 0;
}
},
/** Property. */
TIMESTAMP(false) {
@Override
public String value(final MetaData meta) { return DateTime.format(new Date(meta.dbtime())); }
},
/** Property. */
UPTODATE(false) {
@Override
public Boolean value(final MetaData meta) { return meta.uptodate; }
},
/** Property. */
INPUTPATH(false) {
@Override
public String value(final MetaData meta) { return meta.original; }
},
/** Property. */
INPUTSIZE(false) {
@Override
public Long value(final MetaData meta) { return meta.filesize; }
},
/** Property. */
INPUTDATE(false) {
@Override
public String value(final MetaData meta) { return DateTime.format(new Date(meta.time)); }
},
/** Property. */
TEXTINDEX(true) {
@Override
public Boolean value(final MetaData meta) { return meta.textindex; }
},
/** Property. */
ATTRINDEX(true) {
@Override
public Boolean value(final MetaData meta) { return meta.attrindex; }
},
/** Property. */
TOKENINDEX(true) {
@Override
public Boolean value(final MetaData meta) { return meta.tokenindex; }
},
/** Property. */
FTINDEX(true) {
@Override
public Boolean value(final MetaData meta) { return meta.ftindex; }
},
/** Property. */
TEXTINCLUDE(true) {
@Override
public String value(final MetaData meta) { return meta.textinclude; }
},
/** Property. */
ATTRINCLUDE(true) {
@Override
public String value(final MetaData meta) { return meta.attrinclude; }
},
/** Property. */
TOKENINCLUDE(true) {
@Override
public String value(final MetaData meta) { return meta.tokeninclude; }
},
/** Property. */
FTINCLUDE(true) {
@Override
public String value(final MetaData meta) { return meta.ftinclude; }
},
/** Property. */
LANGUAGE(true) {
@Override
public String value(final MetaData meta) { return meta.language.toString(); }
},
/** Property. */
STEMMING(true) {
@Override
public Boolean value(final MetaData meta) { return meta.stemming; }
},
/** Property. */
CASESENS(true) {
@Override
public Boolean value(final MetaData meta) { return meta.casesens; }
},
/** Property. */
DIACRITICS(true) {
@Override
public Boolean value(final MetaData meta) { return meta.diacritics; }
},
/** Property. */
STOPWORDS(true) {
@Override
public String value(final MetaData meta) { return meta.stopwords; }
},
/** Property. */
UPDINDEX(true) {
@Override
public Boolean value(final MetaData meta) { return meta.updindex; }
},
/** Property. */
AUTOOPTIMIZE(true) {
@Override
public Boolean value(final MetaData meta) { return meta.autooptimize; }
},
/** Property. */
MAXCATS(true) {
@Override
public Integer value(final MetaData meta) { return meta.maxcats; }
},
/** Property. */
MAXLEN(true) {
@Override
public Integer value(final MetaData meta) { return meta.maxlen; }
},
/** Property. */
SPLITSIZE(true) {
@Override
public Integer value(final MetaData meta) { return meta.splitsize; }
};
/** Index property. */
public final boolean index;
/**
* Constructor.
* @param index index property
*/
MetaProp(final boolean index) {
this.index = index;
}
/** Cached enums (faster). */
public static final MetaProp[] VALUES = values();
/**
* Returns the value of a property.
* @param meta meta data
* @return value
*/
public abstract Object value(MetaData meta);
/**
* Returns a property matching the specified string.
* @param name name of enumeration
* @return permission, or {@code null} if no match is found
*/
public static MetaProp get(final String name) {
for(final MetaProp prop : VALUES) {
if(prop.toString().toLowerCase(Locale.ENGLISH).equals(name)) return prop;
}
return null;
}
}