ca.odell.glazedlists.Sequencers Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of glazedlists_java15 Show documentation
Show all versions of glazedlists_java15 Show documentation
Event-driven lists for dynamically filtered and sorted tables
/* Glazed Lists (c) 2003-2006 */
/* http://publicobject.com/glazedlists/ publicobject.com,*/
/* O'Dell Engineering Ltd.*/
package ca.odell.glazedlists;
import ca.odell.glazedlists.impl.GlazedListsImpl;
import java.util.Date;
import java.util.Calendar;
/**
* A factory for creating Sequencers.
*
* @author James Lemieux
*/
public final class Sequencers {
/**
* A dummy constructor to prevent instantiation of this class
*/
private Sequencers() {
throw new UnsupportedOperationException();
}
// Sequencers // // // // // // // // // // // // // // // // // // // // //
public static SequenceList.Sequencer monthSequencer() {
return new MonthSequencer();
}
/**
* This Sequencer produces a sequence of {@link Date} objects normalized
* to the first millisecond of each month.
*/
private static final class MonthSequencer implements SequenceList.Sequencer {
/** A shared Calendar; it is assumed this Sequencer is only access from a single Thread. */
private final Calendar cal = Calendar.getInstance();
/**
* The previous month in the sequence. For example:
*
*
* - previous(February 15, 2006 3:21:22.234) returns February 1, 2006 0:00:00.000
*
- previous(February 1, 2006 0:00:00.000) returns January 1, 2006 0:00:00.000
*
- previous(January 1, 2006 0:00:00.000) returns December 1, 2005 0:00:00.000
*
*/
public Date previous(Date date) {
if (date == null)
throw new IllegalArgumentException("date may not be null");
cal.setTime(date);
// if cal is on the month boundary, rollback to the previous month
if (GlazedListsImpl.isMonthStart(cal))
cal.add(Calendar.MONTH, -1);
// normalize the Date to the first millisecond of the month
return GlazedListsImpl.getMonthStart(cal);
}
/**
* The next month in the sequence. For example:
*
*
* - next(November 15, 2005 3:21:22.234) returns December 1, 2005 0:00:00.000
*
- next(December 1, 2005 0:00:00.000) returns January 1, 2006 0:00:00.000
*
- next(January 1, 2006 0:00:00.000) returns February 1, 2006 0:00:00.000
*
*/
public Date next(Date date) {
if (date == null)
throw new IllegalArgumentException("date may not be null");
cal.setTime(date);
cal.add(Calendar.MONTH, 1);
// normalize the Date to the first millisecond of the month
return GlazedListsImpl.getMonthStart(cal);
}
}
}