package no.ntnu.fp.gui.timepicker; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.util.Calendar; import java.util.Date; import no.ntnu.fp.util.TimeLord; public class DateModel { private PropertyChangeSupport pcs; private Date date; public final static String YEAR_PROPERTY = "Year"; public final static String MONTH_PROPERTY = "Month"; public final static String DAY_PROPERTY = "Day"; public final static String WEEK_PROPERTY = "Week"; public final static String HOURS_PROPERTY = "Hour"; public final static String MINUTES_PROPERTY = "Minute"; public final static String SECONDS_PROPERTY = "Seconds"; public DateModel() { this(new Date()); } public DateModel(Date date) { this.date = date; pcs = new PropertyChangeSupport(this); } public void setDate(Date date) { setYear(date.getYear()); setMonth(date.getMonth()); setDay(date.getDay()); setHours(date.getHours()); setMinutes(date.getMinutes()); } public Date getDate() { return date; } public void setYear(int year) { int oldValue = getYear(); date.setYear(year); pcs.firePropertyChange(YEAR_PROPERTY, oldValue, year); } public int getYear() { return date.getYear() + 1900; } public void setMonth(int month) { int oldValue = getMonth(); date.setMonth(month); pcs.firePropertyChange(MONTH_PROPERTY, oldValue, month); } public int getMonth() { return date.getMonth(); } public void setDay(int day) { int oldValue = getDay(); date.setDate(day); pcs.firePropertyChange(DAY_PROPERTY, oldValue, day); } public int getDay() { return date.getDate(); } public void setHours(int hour) { int oldValue = getHours(); date.setHours(hour); pcs.firePropertyChange(HOURS_PROPERTY, oldValue, hour); } public int getHours() { return date.getHours(); } public void setMinutes(int minutes) { int oldValue = getMinutes(); date.setMinutes(minutes); pcs.firePropertyChange(MINUTES_PROPERTY, oldValue, minutes); } public int getMinutes() { return date.getMinutes(); } public void setSeconds(int seconds) { int oldValue = getSeconds(); date.setSeconds(seconds); pcs.firePropertyChange(SECONDS_PROPERTY, oldValue, seconds); } public int getSeconds() { return date.getSeconds(); } public int getMonthStartDay() { Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, getYear()); c.set(Calendar.MONTH, getMonth()); c.set(Calendar.DATE, 1); return (c.get(Calendar.DAY_OF_WEEK)+5)%7; } public int getDaysInMonth() { Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, getYear()); c.set(Calendar.MONTH, getMonth()); return c.getActualMaximum(Calendar.DAY_OF_MONTH); } public String toString() { return TimeLord.formatDate(date); } public void addPropertyChangeListener(PropertyChangeListener l) { pcs.addPropertyChangeListener(l); } public void removePropertyChangeListener(PropertyChangeListener l) { pcs.removePropertyChangeListener(l); } public int getDayOfWeek() { Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, getYear()); c.set(Calendar.MONTH, getMonth()); c.set(Calendar.DATE, getDay()); return c.get(Calendar.DAY_OF_WEEK); } public int getWeek() { Calendar cal = Calendar.getInstance(); cal.setTime(getDate()); return cal.get(Calendar.WEEK_OF_YEAR); } public void setWeek(int week){ int old = getWeek(); Calendar cal = Calendar.getInstance(); cal.setTime(getDate()); cal.set(Calendar.WEEK_OF_YEAR, week); cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek()); date = cal.getTime(); pcs.firePropertyChange(WEEK_PROPERTY, old ,week); } }