1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
package tim.prune.function.deletebydate;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
/**
* List of date info objects for use by the table model
*/
public class DateInfoList
{
/** list of info about points according to date */
private List<DateInfo> _infoList = new ArrayList<DateInfo>();
/** previously used dateinfo object to reduce list searching */
private DateInfo _previousInfo = null;
/** true if the list has been sorted, false otherwise */
private boolean _hasBeenSorted = false;
/**
* Add a point to the corresponding dateinfo
* @param inDate date of current point, or null if no timestamp
*/
public void addPoint(Date inDate)
{
DateInfo currentInfo = null;
if (_previousInfo != null && _previousInfo.isSameDate(inDate))
{
// found it
currentInfo = _previousInfo;
}
else
{
// loop through list, to see if date already present
for (DateInfo info : _infoList)
{
if (info.isSameDate(inDate))
{
currentInfo = info;
break;
}
}
// create new info if necessary
if (currentInfo == null)
{
currentInfo = new DateInfo(inDate);
_infoList.add(currentInfo);
_hasBeenSorted = false;
}
_previousInfo = currentInfo;
}
// Now we've identified the current info or created a new one
currentInfo.incrementCount();
}
/**
* Clear the whole list
*/
public void clearAll()
{
_infoList.clear();
_previousInfo = null;
_hasBeenSorted = true;
}
/**
* @return number of entries in the list, including dateless points
*/
public int getNumEntries()
{
return _infoList.size();
}
/**
* @return the total number of points found, which should match the track size
*/
public int getTotalNumPoints()
{
int total = 0;
for (DateInfo info : _infoList) {
total += info.getPointCount();
}
return total;
}
/**
* Sort the info list by ascending timestamps
*/
private void sort()
{
if (!_hasBeenSorted)
{
Collections.sort(_infoList);
_hasBeenSorted = true;
}
}
/**
* Get the DateInfo object at the given index
* @param inIndex index in (sorted) list
* @return corresponding object (may throw exception if out of range)
*/
public DateInfo getDateInfo(int inIndex)
{
sort();
return _infoList.get(inIndex);
}
}
|