/*
Name:
- MfDate
Description:
-
Requires:
-
Provides:
-
Part of: ProcessPuzzle Framework, Domain and Business Model Ready Architecture. Provides content, workflow and social networking functionality.
http://www.processpuzzle.com
ProcessPuzzle - Content and Workflow Management Integration Business Platform
Author(s):
- Zsolt Zsuffa
Copyright: (C) 2011 This program is free software: you can redistribute it and/or modify it under the terms of the
GNU General Public License as published by the Free Software Foundation, either version 3 of the License,
or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.processpuzzle.util.domain;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class MfDate implements Comparable
{
private SimpleDateFormat _formatter = (SimpleDateFormat) DateFormat.getDateInstance();
private static MfDate today;
public static MfDate PAST = new MfDate(new GregorianCalendar(0,1,1));
public static MfDate FUTURE = new MfDate(new GregorianCalendar(10000,1,1));
//<codeFragment name = "data">
private GregorianCalendar _base;
public MfDate() {
this(new GregorianCalendar());
}
public MfDate(int year, int month, int day) {
initialize (new GregorianCalendar(year, month - 1, day));
}
private void initialize (GregorianCalendar arg) {
_base = trimToDays(arg);
}
private GregorianCalendar trimToDays(GregorianCalendar arg) {
GregorianCalendar result = arg;
result.set(Calendar.HOUR_OF_DAY,0);
result.set(Calendar.MINUTE, 0);
result.set(Calendar.SECOND, 0);
result.set(Calendar.MILLISECOND, 0);
return result;
}
//</codeFragment>
public MfDate (Date arg) {
GregorianCalendar gc = new GregorianCalendar();
gc.setTime(arg);
initialize(gc);
}
public MfDate (GregorianCalendar arg) {
initialize(arg);
}
//<codeFragment name = "addDays">
public MfDate addDays(int arg) {
return new MfDate(new GregorianCalendar(getYear(), getMonth(), getDayOfMonth() + arg));
}
public MfDate minusDays(int arg) {
return addDays(-arg);
}
//</codeFragment>
//<codeFragment name = "compare">
public boolean after (MfDate arg) {
return getTime().after(arg.getTime());
}
public boolean before (MfDate arg) {
return getTime().before(arg.getTime());
}
public int compareTo(Object arg) {
MfDate other = (MfDate) arg;
return getTime().compareTo(other.getTime());
}
public boolean equals(Object arg) {
if (! (arg instanceof MfDate)) return false;
MfDate other = (MfDate) arg;
return (_base.equals(other._base));
}
public Date getTime() {
return _base.getTime();
}
//</codeFragment>
public String formattedString() {
return _formatter.format(getTime());
}
public GregorianCalendar getCalendar() {
return _base;
}
public int getDayOfMonth() {
return _base.get(Calendar.DAY_OF_MONTH);
}
public String getMediumString() {
DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM);
return df.format(getTime());
}
public int getMonth() {
return _base.get(Calendar.MONTH);
}
public String getSqlString() {
_formatter.applyPattern("#M/d/yyyy#");
return _formatter.format(getTime());
}
public int getYear() {
return _base.get(Calendar.YEAR);
}
public int hashCode() {
return _base.hashCode();
}
public static MfDate past() {
GregorianCalendar greg = new GregorianCalendar(0,1,1);
return new MfDate(greg);
}
public String rawString() {
return _base.getTime().toString();
}
public static void setToday(int year, int month, int day) {
setToday(new MfDate(year, month, day));
}
public static void setToday(MfDate arg) {
today = arg;
}
public static MfDate today() {
return (today == null) ?
new MfDate():
today;
}
public String toString() {
return formattedString();
}
}