protected TableXYDataset buildDataSet(List<JNIssue.Activity> activities) throws IOException { Map<IssueStatus,AgeTrendBuilder> trends = new EnumMap<IssueStatus,AgeTrendBuilder>(IssueStatus.class); for (IssueStatus s : IssueStatus.values()) trends.put(s,new AgeTrendBuilder()); Collections.sort(activities,AGE_COMPARATOR); // most of the time, long tail is not very interesting, // so cut off at some arbitrary point activities = activities.subList(0,(activities.size()*9+9)/10); for (Activity a : activities) { if(!a.isUpdate()) { trends.get(a.getCurrentStatus()).inc(a); continue; } if(a.getField()!= IssueField.STATUS) continue; IssueStatus o = IssueStatus.valueOf(a.getOldValue()); trends.get(o).dec(a); IssueStatus n = IssueStatus.valueOf(a.getNewValue()); trends.get(n).inc(a); } TrendBuilder.completeMissingLinks(trends.values()); CategoryTableXYDataset ds = new CategoryTableXYDataset(); for (Entry<IssueStatus,AgeTrendBuilder> e : trends.entrySet()) e.getValue().addTo(ds,e.getKey().name()); saveDataset(ds); return ds; }