Normand Briere
2019-04-22 a9e12f6c508810604c8c91ee15451776b08ce1a1
timeflow/views/SummaryView.java
....@@ -13,169 +13,172 @@
1313
1414 import javax.swing.*;
1515
16
+public class SummaryView extends AbstractView
17
+{
1618
17
-public class SummaryView extends AbstractView {
18
-
19
- private JEditorPane analysisDisplay;
20
- private FieldAnalysis[] fieldAnalyzers=new FieldAnalysis[]
21
- {
22
- new MissingValueAnalysis(), new RangeDateAnalysis(),
23
- new RangeNumberAnalysis(), new FrequencyAnalysis()
24
- };
25
- private int numItems;
26
- private int numFiltered;
27
- private Interval range;
28
- private JComponent controls;
29
-
30
- public SummaryView(TFModel model)
31
- {
32
- super(model);
33
- analysisDisplay=HtmlDisplay.create();
34
- JScrollPane scrollPane = new JScrollPane(analysisDisplay);
35
- setLayout(new GridLayout(1,1));
36
- add(scrollPane);
37
-
38
- controls=new HtmlControls("This report gives a <br> statistical breakdown<br> "+
39
- "of your data. <p> Reading the summary often helps<br> you find "+
40
- "data errors.");
41
- }
42
-
43
- @Override
44
- public JComponent _getControls()
45
- {
46
- return controls;
47
- }
48
-
49
- void makeHtml()
50
- {
51
- Display d=getModel().getDisplay();
52
- ActDB db=getModel().getDB();
53
- ActList acts=getModel().getActs();
54
- StringBuffer page=new StringBuffer();
55
- page.append("<blockquote>");
56
- if (getModel().getDB()==null)
57
- {
58
- page.append("<h1><font color=#003399>No data loaded.</font></h1>");
59
- }
60
- else
61
- {
62
- page.append("<BR><BR><BR>File: "+getModel().getDbFile()+"<br>");
63
- page.append("Source: "+getModel().getDB().getSource()+"<br><br>");
64
- page.append("Description: "+getModel().getDB().getDescription()+"<br><br>");
65
- page.append("<br><br>");
66
- page.append("<table border=0>");
67
-
68
-
69
- page.append("<tr><td valign=top align=left width=100><b>");
70
- page.append("<font size=+1>Data</font><br>");
71
-
72
- page.append("</td><td align=top>");
73
- append(page, "Total events", ""+numItems);
74
-
75
- if (numItems>0)
76
- {
77
- append(page, "Total selected", ""+numFiltered);
78
- if (numFiltered>0)
79
- {
80
- append(page, "Earliest", new Date(range.start).toString());
81
- append(page, "Latest", new Date(range.end).toString());
82
- }
83
- }
84
- page.append("<br></td></tr>");
85
-
86
- page.append("<tr><td valign=top align=left width=100><b>");
87
- page.append("<font size=+1>Fields</font><br>");
88
-
89
- page.append("</td><td align=top>");
90
- for (Field f: getModel().getDB().getFields())
91
- {
92
- append(page, f.getName(),FieldFormatCatalog.humanName(f.getType())+fieldLabel(f));
93
- }
94
- page.append("<br></td></tr>");
95
-
96
-
97
- page.append("</table>");
19
+ private JEditorPane analysisDisplay;
20
+ private FieldAnalysis[] fieldAnalyzers = new FieldAnalysis[]
21
+ {
22
+ new MissingValueAnalysis(), new RangeDateAnalysis(),
23
+ new RangeNumberAnalysis(), new FrequencyAnalysis()
24
+ };
25
+ private int numItems;
26
+ private int numFiltered;
27
+ private Interval range;
28
+ private JComponent controls;
9829
99
- if (numFiltered>0)
100
- {
101
- page.append("<h1>Statistics (for "+acts.size()+" items)</h1>");
102
- for (Field field: db.getFields())
103
- {
104
- page.append("<h2>"+field.getName()+"</h2>");
105
- page.append("<ul>");
106
- for (int i=0; i<fieldAnalyzers.length; i++)
107
- {
108
- FieldAnalysis fa=fieldAnalyzers[i];
109
- if (fa.canHandleType(field.getType()))
110
- {
111
- page.append("<li>");
112
- page.append("<b><font color=#808080>"+fa.getName()+"</font></b><br>");
113
- fa.perform(acts, field);
114
- String[] s=fa.getResultDescription();
115
- for (int j=0; j<s.length; j++)
116
- {
117
- page.append(s[j]);
118
- page.append("<br>");
119
- }
120
- page.append("</li>");
121
- }
122
- }
123
- page.append("</ul>");
124
- }
125
- }
126
- }
127
- page.append("</blockquote>");
128
- analysisDisplay.setText(page.toString());
129
- analysisDisplay.setCaretPosition(0);
130
- }
131
-
132
- static void append(StringBuffer page, String label, String value)
133
- {
134
- page.append("<b><font color=#808080>"+label+"</font></b>&nbsp;&nbsp;&nbsp;&nbsp;");
135
- page.append(value);
136
- page.append("<br>");
137
- }
138
-
139
- @Override
140
- protected void onscreen(boolean majorChange)
141
- {
142
- _note(null);
143
- }
30
+ public SummaryView(TimeflowModel model)
31
+ {
32
+ super(model);
33
+ analysisDisplay = HtmlDisplay.create();
34
+ JScrollPane scrollPane = new JScrollPane(analysisDisplay);
35
+ setLayout(new GridLayout(1, 1));
36
+ add(scrollPane);
14437
145
- protected void _note(TFEvent e) {
146
- recalculate();
147
- makeHtml();
148
- repaint();
149
- }
150
-
151
- String fieldLabel(Field f)
152
- {
153
- StringBuffer b=new StringBuffer("<b>");
154
- ActDB db=getModel().getDB();
155
- for (String v: VirtualField.list())
156
- {
157
- if (db.getField(v)!=null && db.getField(v).getName().equals(f.getName()))
158
- b.append(" (Shown in visualization as "+VirtualField.humanName(v)+")");
159
- }
160
- b.append("</b>");
161
- return b.toString();
162
- }
163
-
164
- void recalculate()
165
- {
166
- ActList acts=getModel().getActs();
167
- if (acts==null)
168
- {
169
- numItems=0;
170
- return;
171
- }
172
- numFiltered=acts.size();
173
- numItems=getModel().getDB().size();
174
- range=DBUtils.range(acts, VirtualField.START);
175
- }
38
+ controls = new HtmlControls("This report gives a <br> statistical breakdown<br> "
39
+ + "of your data. <p> Reading the summary often helps<br> you find "
40
+ + "data errors.");
41
+ }
17642
177
- @Override
178
- public String getName() {
179
- return "Summary";
180
- }
43
+ @Override
44
+ public JComponent _getControls()
45
+ {
46
+ return controls;
47
+ }
48
+
49
+ void makeHtml()
50
+ {
51
+ Display d = getModel().getDisplay();
52
+ ActDB db = getModel().getDB();
53
+ ActList acts = getModel().getActs();
54
+ StringBuffer page = new StringBuffer();
55
+ page.append("<blockquote>");
56
+ if (getModel().getDB() == null)
57
+ {
58
+ page.append("<h1><font color=#003399>No data loaded.</font></h1>");
59
+ } else
60
+ {
61
+ page.append("<BR><BR><BR>File: " + getModel().getDbFile() + "<br>");
62
+ page.append("Source: " + getModel().getDB().getSource() + "<br><br>");
63
+ page.append("Description: " + getModel().getDB().getDescription() + "<br><br>");
64
+ page.append("<br><br>");
65
+ page.append("<table border=0>");
66
+
67
+
68
+ page.append("<tr><td valign=top align=left width=100><b>");
69
+ page.append("<font size=+1>Data</font><br>");
70
+
71
+ page.append("</td><td align=top>");
72
+ append(page, "Total events", "" + numItems);
73
+
74
+ if (numItems > 0)
75
+ {
76
+ append(page, "Total selected", "" + numFiltered);
77
+ if (numFiltered > 0)
78
+ {
79
+ append(page, "Earliest", new Date(range.start).toString());
80
+ append(page, "Latest", new Date(range.end).toString());
81
+ }
82
+ }
83
+ page.append("<br></td></tr>");
84
+
85
+ page.append("<tr><td valign=top align=left width=100><b>");
86
+ page.append("<font size=+1>Fields</font><br>");
87
+
88
+ page.append("</td><td align=top>");
89
+ for (Field f : getModel().getDB().getFields())
90
+ {
91
+ append(page, f.getName(), FieldFormatCatalog.humanName(f.getType()) + fieldLabel(f));
92
+ }
93
+ page.append("<br></td></tr>");
94
+
95
+
96
+ page.append("</table>");
97
+
98
+ if (numFiltered > 0)
99
+ {
100
+ page.append("<h1>Statistics (for " + acts.size() + " items)</h1>");
101
+ for (Field field : db.getFields())
102
+ {
103
+ page.append("<h2>" + field.getName() + "</h2>");
104
+ page.append("<ul>");
105
+ for (int i = 0; i < fieldAnalyzers.length; i++)
106
+ {
107
+ FieldAnalysis fa = fieldAnalyzers[i];
108
+ if (fa.canHandleType(field.getType()))
109
+ {
110
+ page.append("<li>");
111
+ page.append("<b><font color=#808080>" + fa.getName() + "</font></b><br>");
112
+ fa.perform(acts, field);
113
+ String[] s = fa.getResultDescription();
114
+ for (int j = 0; j < s.length; j++)
115
+ {
116
+ page.append(s[j]);
117
+ page.append("<br>");
118
+ }
119
+ page.append("</li>");
120
+ }
121
+ }
122
+ page.append("</ul>");
123
+ }
124
+ }
125
+ }
126
+ page.append("</blockquote>");
127
+ analysisDisplay.setText(page.toString());
128
+ analysisDisplay.setCaretPosition(0);
129
+ }
130
+
131
+ static void append(StringBuffer page, String label, String value)
132
+ {
133
+ page.append("<b><font color=#808080>" + label + "</font></b>&nbsp;&nbsp;&nbsp;&nbsp;");
134
+ page.append(value);
135
+ page.append("<br>");
136
+ }
137
+
138
+ @Override
139
+ protected void onscreen(boolean majorChange)
140
+ {
141
+ _note(null);
142
+ }
143
+
144
+ protected void _note(TFEvent e)
145
+ {
146
+ recalculate();
147
+ makeHtml();
148
+ repaint();
149
+ }
150
+
151
+ String fieldLabel(Field f)
152
+ {
153
+ StringBuffer b = new StringBuffer("<b>");
154
+ ActDB db = getModel().getDB();
155
+ for (String v : VirtualField.list())
156
+ {
157
+ if (db.getField(v) != null && db.getField(v).getName().equals(f.getName()))
158
+ {
159
+ b.append(" (Shown in visualization as " + VirtualField.humanName(v) + ")");
160
+ }
161
+ }
162
+ b.append("</b>");
163
+ return b.toString();
164
+ }
165
+
166
+ void recalculate()
167
+ {
168
+ ActList acts = getModel().getActs();
169
+ if (acts == null)
170
+ {
171
+ numItems = 0;
172
+ return;
173
+ }
174
+ numFiltered = acts.size();
175
+ numItems = getModel().getDB().size();
176
+ range = DBUtils.range(acts, VirtualField.START);
177
+ }
178
+
179
+ @Override
180
+ public String getName()
181
+ {
182
+ return "Summary";
183
+ }
181184 }