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("

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(""); 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("Fields
"); page.append("
"); for (Field f : getModel().getDB().getFields()) { append(page, f.getName(), FieldFormatCatalog.humanName(f.getType()) + fieldLabel(f)); } page.append("
"); if (numFiltered > 0) { page.append("

Statistics (for " + acts.size() + " items)

"); for (Field field : db.getFields()) { page.append("

" + field.getName() + "

"); page.append(""); } } } 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("
"); } @Override protected void onscreen(boolean majorChange) { _note(null); } protected void _note(TFEvent e) { recalculate(); makeHtml(); repaint(); } String fieldLabel(Field f) { StringBuffer b = new StringBuffer(""); ActDB db = getModel().getDB(); for (String v : VirtualField.list()) { if (db.getField(v) != null && db.getField(v).getName().equals(f.getName())) { b.append(" (Shown in visualization as " + VirtualField.humanName(v) + ")"); } } b.append(""); return b.toString(); } void recalculate() { ActList acts = getModel().getActs(); if (acts == null) { numItems = 0; return; } numFiltered = acts.size(); numItems = getModel().getDB().size(); range = DBUtils.range(acts, VirtualField.START); } @Override public String getName() { return "Summary"; } }