net.solarnetwork.util.JodaDatePropertySerializer.java Source code

Java tutorial

Introduction

Here is the source code for net.solarnetwork.util.JodaDatePropertySerializer.java

Source

/* ===================================================================
 * JodaDatePropertySerializer.java
 * 
 * Created Sep 24, 2009 2:48:09 PM
 * 
 * Copyright (c) 2009 Solarnetwork.net Dev Team.
 * 
 * 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 2 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, write to the Free Software 
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 
 * 02111-1307 USA
 * ===================================================================
 * $Id$
 * ===================================================================
 */

package net.solarnetwork.util;

import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

import org.joda.time.DateTimeZone;
import org.joda.time.ReadableInstant;
import org.joda.time.ReadablePartial;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

/**
 * {@link PropertySerializer} for Joda date/time objects into Strings.
 *
 * @author matt
 * @version $Revision$ $Date$
 */
public class JodaDatePropertySerializer implements PropertySerializer {

    private DateTimeFormatter formatter = null;

    /**
     * Construct from a String date pattern.
     * 
     * @param pattern the Joda date format pattern
     */
    public JodaDatePropertySerializer(String pattern) {
        this(pattern, null);
    }

    /**
     * Construct from a String date pattern.
     * 
     * @param pattern the Joda date format pattern
     * @param timeZone the time zone to format in
     */
    public JodaDatePropertySerializer(String pattern, TimeZone timeZone) {
        formatter = DateTimeFormat.forPattern(pattern);
        if (timeZone != null) {
            formatter = formatter.withZone(DateTimeZone.forTimeZone(timeZone));
        }
    }

    /* (non-Javadoc)
     * @see net.sf.solarnetwork.util.PropertySerializer#serialize(java.lang.Object, java.lang.String, java.lang.Object)
     */
    public Object serialize(Object data, String propertyName, Object propertyValue) {
        if (propertyValue == null) {
            return null;
        } else if (propertyValue instanceof ReadableInstant) {
            return formatter.print((ReadableInstant) propertyValue);
        } else if (propertyValue instanceof ReadablePartial) {
            return formatter.print((ReadablePartial) propertyValue);
        } else if (propertyValue instanceof Date) {
            return formatter.print(((Date) propertyValue).getTime());
        } else if (propertyValue instanceof Calendar) {
            return formatter.print(((Calendar) propertyValue).getTimeInMillis());
        }
        throw new IllegalArgumentException(
                "Unsupported date object [" + propertyValue.getClass() + "]: " + propertyValue);
    }

}