001: /**
002: * ===========================================
003: * JFreeReport : a free Java reporting library
004: * ===========================================
005: *
006: * Project Info: http://reporting.pentaho.org/
007: *
008: * (C) Copyright 2001-2007, by Object Refinery Ltd, Pentaho Corporation and Contributors.
009: *
010: * This library is free software; you can redistribute it and/or modify it under the terms
011: * of the GNU Lesser General Public License as published by the Free Software Foundation;
012: * either version 2.1 of the License, or (at your option) any later version.
013: *
014: * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
015: * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
016: * See the GNU Lesser General Public License for more details.
017: *
018: * You should have received a copy of the GNU Lesser General Public License along with this
019: * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
020: * Boston, MA 02111-1307, USA.
021: *
022: * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
023: * in the United States and other countries.]
024: *
025: * ------------
026: * DateFormatFilter.java
027: * ------------
028: * (C) Copyright 2001-2007, by Object Refinery Ltd, Pentaho Corporation and Contributors.
029: */package org.jfree.report.filter;
030:
031: import java.text.DateFormat;
032: import java.text.Format;
033: import java.util.Date;
034:
035: import org.jfree.report.function.ExpressionRuntime;
036:
037: /**
038: * A filter that creates string from dates. This filter will format java.util. Date
039: * objects using a java.text.DateFormat to create the string representation for the date
040: * obtained from the datasource.
041: * <p/>
042: * If the object read from the datasource is no date, the NullValue defined by
043: * setNullValue(Object) is returned.
044: *
045: * @author Thomas Morgner
046: * @see java.text.DateFormat
047: */
048: public class DateFormatFilter extends FormatFilter {
049: /**
050: * Default constructor. Creates a new filter using the default date format for the
051: * current locale.
052: */
053: public DateFormatFilter() {
054: setFormatter(DateFormat.getInstance());
055: }
056:
057: /**
058: * Returns the date format object.
059: *
060: * @return The date format object.
061: */
062: public DateFormat getDateFormat() {
063: return (DateFormat) getFormatter();
064: }
065:
066: /**
067: * Sets the date format for the filter.
068: *
069: * @param format The format.
070: * @throws NullPointerException if the format given is null
071: */
072: public void setDateFormat(final DateFormat format) {
073: super .setFormatter(format);
074: }
075:
076: /**
077: * Sets the formatter.
078: *
079: * @param format The format.
080: * @throws ClassCastException if the format given is no DateFormat
081: * @throws NullPointerException if the format given is null
082: */
083: public void setFormatter(final Format format) {
084: final DateFormat dfmt = (DateFormat) format;
085: super .setFormatter(dfmt);
086: }
087:
088: public Object getRawValue(final ExpressionRuntime runtime) {
089: final Object value = super .getRawValue(runtime);
090: if (value instanceof Number) {
091: // Automagically fix numbers into dates
092: final Number number = (Number) value;
093: return new Date(number.longValue());
094: }
095: return value;
096: }
097:
098: public FormatSpecification getFormatString(
099: final ExpressionRuntime runtime,
100: FormatSpecification formatSpecification) {
101: final DataSource source = getDataSource();
102: if (source instanceof RawDataSource) {
103: final RawDataSource rds = (RawDataSource) source;
104: return rds.getFormatString(runtime, formatSpecification);
105: }
106: if (formatSpecification == null) {
107: formatSpecification = new FormatSpecification();
108: }
109: formatSpecification.redefine(
110: FormatSpecification.TYPE_UNDEFINED, null);
111: return formatSpecification;
112: }
113:
114: }
|