RandomSec/src/main/java/com/metaweb/gridworks/browsing/facets/TextSearchFacet.java

85 lines
2.3 KiB
Java
Raw Normal View History

package com.metaweb.gridworks.browsing.facets;
import java.util.Properties;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONWriter;
import com.metaweb.gridworks.browsing.FilteredRows;
import com.metaweb.gridworks.browsing.filters.ExpressionStringComparisonRowFilter;
import com.metaweb.gridworks.browsing.filters.RowFilter;
import com.metaweb.gridworks.expr.Evaluable;
import com.metaweb.gridworks.expr.VariableExpr;
import com.metaweb.gridworks.model.Project;
public class TextSearchFacet implements Facet {
protected String _name;
protected String _columnName;
protected int _cellIndex;
protected String _query;
protected String _mode;
protected boolean _caseSensitive;
public TextSearchFacet() {
}
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("name"); writer.value(_name);
writer.key("columnName"); writer.value(_columnName);
writer.key("query"); writer.value(_query);
writer.key("mode"); writer.value(_mode);
writer.key("caseSensitive"); writer.value(_caseSensitive);
writer.endObject();
}
public void initializeFromJSON(Project project, JSONObject o) throws Exception {
_name = o.getString("name");
_columnName = o.getString("columnName");
_cellIndex = project.columnModel.getColumnByName(_columnName).getCellIndex();
if (!o.isNull("query")) {
_query = o.getString("query");
}
_mode = o.getString("mode");
_caseSensitive = o.getBoolean("caseSensitive");
if (_query != null) {
_query = _query.trim();
if (!_caseSensitive) {
_query = _query.toLowerCase();
}
}
}
public RowFilter getRowFilter() {
if (_query == null || _query.length() == 0) {
return null;
}
Evaluable eval = new VariableExpr("value");
if ("regex".equals(_mode)) {
return new ExpressionStringComparisonRowFilter(eval, _cellIndex) {
protected boolean checkValue(String s) {
return s.matches(_query);
};
};
} else {
return new ExpressionStringComparisonRowFilter(eval, _cellIndex) {
protected boolean checkValue(String s) {
return (_caseSensitive ? s : s.toLowerCase()).contains(_query);
};
};
}
}
public void computeChoices(Project project, FilteredRows filteredRows) {
// nothing to do
}
}