package timeflow.views;
import timeflow.app.ui.HtmlDisplay;
import timeflow.data.analysis.*;
import timeflow.data.db.*;
import timeflow.data.time.*;
import timeflow.format.field.FieldFormatCatalog;
import timeflow.model.*;
import java.awt.*;
import java.util.Date;
import javax.swing.*;
public class SummaryView extends AbstractView
{
private JEditorPane analysisDisplay;
private FieldAnalysis[] fieldAnalyzers = new FieldAnalysis[]
{
new MissingValueAnalysis(), new RangeDateAnalysis(),
new RangeNumberAnalysis(), new FrequencyAnalysis()
};
private int numItems;
private int numFiltered;
private Interval range;
private JComponent controls;
public SummaryView(TFModel model)
{
super(model);
analysisDisplay = HtmlDisplay.create();
JScrollPane scrollPane = new JScrollPane(analysisDisplay);
setLayout(new GridLayout(1, 1));
add(scrollPane);
controls = new HtmlControls("This report gives a
statistical breakdown
"
+ "of your data.
Reading the summary often helps
you find "
+ "data errors.");
}
@Override
public JComponent _getControls()
{
return controls;
}
void makeHtml()
{
Display d = getModel().getDisplay();
ActDB db = getModel().getDB();
ActList acts = getModel().getActs();
StringBuffer page = new StringBuffer();
page.append("
"); if (getModel().getDB() == null) { page.append(""); analysisDisplay.setText(page.toString()); analysisDisplay.setCaretPosition(0); } static void append(StringBuffer page, String label, String value) { page.append("" + label + " "); page.append(value); page.append("No data loaded.
"); } else { page.append("
File: " + getModel().getDbFile() + "
"); page.append("Source: " + getModel().getDB().getSource() + "
"); page.append("Description: " + getModel().getDB().getDescription() + "
"); page.append("
"); page.append(""); page.append("
"); if (numFiltered > 0) { page.append(""); page.append(" "); page.append("Data
"); page.append(""); append(page, "Total events", "" + numItems); if (numItems > 0) { append(page, "Total selected", "" + numFiltered); if (numFiltered > 0) { append(page, "Earliest", new Date(range.start).toString()); append(page, "Latest", new Date(range.end).toString()); } } page.append(" "); page.append(" "); page.append("Fields
"); page.append(""); for (Field f : getModel().getDB().getFields()) { append(page, f.getName(), FieldFormatCatalog.humanName(f.getType()) + fieldLabel(f)); } page.append(" Statistics (for " + acts.size() + " items)
"); for (Field field : db.getFields()) { page.append("" + field.getName() + "
"); page.append(""); for (int i = 0; i < fieldAnalyzers.length; i++) { FieldAnalysis fa = fieldAnalyzers[i]; if (fa.canHandleType(field.getType())) { page.append("
"); } } } page.append("- "); page.append("" + fa.getName() + "
"); } } page.append("
"); fa.perform(acts, field); String[] s = fa.getResultDescription(); for (int j = 0; j < s.length; j++) { page.append(s[j]); page.append("
"); } page.append("