001/*
002 * HA-JDBC: High-Availability JDBC
003 * Copyright (c) 2004-2007 Paul Ferraro
004 * 
005 * This library is free software; you can redistribute it and/or modify it 
006 * under the terms of the GNU Lesser General Public License as published by the 
007 * Free Software Foundation; either version 2.1 of the License, or (at your 
008 * option) any later version.
009 * 
010 * This library is distributed in the hope that it will be useful, but WITHOUT
011 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
012 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 
013 * for more details.
014 * 
015 * You should have received a copy of the GNU Lesser General Public License
016 * along with this library; if not, write to the Free Software Foundation, 
017 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
018 * 
019 * Contact: ferraro@users.sourceforge.net
020 */
021package net.sf.hajdbc.util;
022
023import java.text.ParseException;
024import java.util.Date;
025
026import org.quartz.CronExpression;
027
028/**
029 * @author Paul Ferraro
030 *
031 */
032public final class Formatter
033{
034        public static String serializeCronExpression(CronExpression expression)
035        {
036                return (expression != null) ? expression.getCronExpression() : null;
037        }
038        
039        public static CronExpression deserializeCronExpression(String schedule) throws ParseException
040        {
041                if (schedule == null)
042                {
043                        return null;
044                }
045                
046                CronExpression expression = new CronExpression(schedule);
047                
048                // Quartz inappropriately throws an UnsupportedOperationException if both day-of-week
049                // and day-of-month are specified - so we preemptively test the expression here.
050                try
051                {
052                        expression.getNextValidTimeAfter(new Date());
053                        
054                        return expression;
055                }
056                catch (UnsupportedOperationException e)
057                {
058                        throw new ParseException(e.getMessage(), schedule.length());
059                }
060        }
061        
062        public static String serializeClass(Class<?> targetClass)
063        {
064                return (targetClass != null) ? targetClass.getName() : null;
065        }
066        
067        public static Class<?> deserializeClass(String className) throws ClassNotFoundException
068        {
069                return (className != null) ? Class.forName(className) : null;
070        }
071}