RandomSec/src/main/java/com/metaweb/gridworks/commands/info/GetColumnsInfoCommand.java

98 lines
3.5 KiB
Java

package com.metaweb.gridworks.commands.info;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.browsing.facets.NumericBinIndex;
import com.metaweb.gridworks.commands.Command;
import com.metaweb.gridworks.expr.Evaluable;
import com.metaweb.gridworks.expr.MetaParser;
import com.metaweb.gridworks.expr.ParsingException;
import com.metaweb.gridworks.model.Column;
import com.metaweb.gridworks.model.Project;
public class GetColumnsInfoCommand extends Command {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
//long start = System.currentTimeMillis();
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Type", "application/json");
Project project = getProject(request);
//Engine engine = getEngine(request, project);
JSONWriter writer = new JSONWriter(response.getWriter());
writer.array();
for (Column column : project.columnModel.columns) {
writer.object();
write(project, column, writer);
writer.endObject();
}
writer.endArray();
//Gridworks.log("Obtained columns info in " + (System.currentTimeMillis() - start) + "ms");
} catch (Exception e) {
e.printStackTrace();
respondException(response, e);
}
}
private NumericBinIndex getBinIndex(Project project, Column column) {
String expression = "value";
String key = "numeric-bin:" + expression;
Evaluable eval = null;
try {
eval = MetaParser.parse(expression);
} catch (ParsingException e) {
// this should never happen
}
NumericBinIndex index = (NumericBinIndex) column.getPrecompute(key);
if (index == null) {
index = new NumericBinIndex(project, column.getName(), column.getCellIndex(), eval);
column.setPrecompute(key, index);
}
return index;
}
private void write(Project project, Column column, JSONWriter writer) throws JSONException {
NumericBinIndex columnIndex = getBinIndex(project, column);
if (columnIndex != null) {
writer.key("name");
writer.value(column.getName());
boolean is_numeric = columnIndex.isNumeric();
writer.key("is_numeric");
writer.value(is_numeric);
writer.key("numeric_row_count");
writer.value(columnIndex.getNumericRowCount());
writer.key("non_numeric_row_count");
writer.value(columnIndex.getNonNumericRowCount());
writer.key("error_row_count");
writer.value(columnIndex.getErrorRowCount());
writer.key("blank_row_count");
writer.value(columnIndex.getBlankRowCount());
if (is_numeric) {
writer.key("min");
writer.value(columnIndex.getMin());
writer.key("max");
writer.value(columnIndex.getMax());
writer.key("step");
writer.value(columnIndex.getStep());
}
} else {
writer.key("error");
writer.value("error finding numeric information on the '" + column.getName() + "' column");
}
}
}