+package tim.prune.function.deletebydate;
+
+import java.text.DateFormat;
+import java.util.Date;
+import java.util.TimeZone;
+
+/**
+ * Class to hold the information about a date,
+ * including how many points correspond to the date
+ * and whether it has been selected for deletion or not
+ */
+public class DateInfo implements Comparable<DateInfo>
+{
+ /** Date, or null for no date - used for earlier/later comparison */
+ private Date _date = null;
+ /** String representation of date */
+ private String _dateString = null;
+ /** Number of points with this date */
+ private int _numPoints = 0;
+ /** Flag for deletion or retention */
+ private boolean _toDelete = false;
+
+ // Doesn't really matter what format is used here, as long as dates are different
+ private static final DateFormat DEFAULT_DATE_FORMAT = DateFormat.getDateInstance();
+
+
+ /**
+ * @param inZone Timezone to use for the date identification
+ */
+ public static void setTimezone(TimeZone inZone)
+ {
+ DEFAULT_DATE_FORMAT.setTimeZone(inZone);
+ }
+
+ /**
+ * Constructor
+ * @param inDate date object from timestamp
+ */
+ public DateInfo(Date inDate)
+ {
+ _date = inDate;
+ if (_date == null) {
+ _dateString = "";
+ }
+ else {
+ _dateString = DEFAULT_DATE_FORMAT.format(_date);
+ }
+ _numPoints = 0;
+ _toDelete = false;
+ }
+
+ /**
+ * @return true if this info is for dateless points (points without timestamp)
+ */
+ public boolean isDateless() {
+ return (_date == null);
+ }
+
+ /**
+ * @return string representation of date
+ */
+ public String getString() {
+ return _dateString;
+ }
+
+ /**
+ * Compare with a given Date object to see if they represent the same date
+ * @param inDate date to compare
+ * @return true if they're the same date
+ */
+ public boolean isSameDate(Date inDate)
+ {
+ if (inDate == null) {
+ return (_date == null);
+ }
+ else if (_dateString == null) {
+ return false;
+ }
+ String otherDateString = DEFAULT_DATE_FORMAT.format(inDate);
+ return _dateString.equals(otherDateString);
+ }
+
+ /**
+ * Increment the point count
+ */
+ public void incrementCount() {
+ _numPoints++;
+ }
+
+ /**
+ * @return point count
+ */
+ public int getPointCount() {
+ return _numPoints;
+ }
+
+ /**
+ * @param inFlag true to delete, false to keep
+ */
+ public void setDeleteFlag(boolean inFlag) {
+ _toDelete = inFlag;
+ }
+
+ /**
+ * @return true to delete, false to keep
+ */
+ public boolean getDeleteFlag() {
+ return _toDelete;
+ }
+
+ /**
+ * Compare with another DateInfo object for sorting
+ */
+ public int compareTo(DateInfo inOther)
+ {
+ // Dateless goes first
+ if (_date == null || _dateString == null) {return -1;}
+ if (inOther._date == null || inOther._dateString == null) {return 1;}
+ // Just compare dates
+ return _date.compareTo(inOther._date);
+ }
+}