1 /*** 2 * Copyright (c) 2003 held jointly by the individual authors. 3 * 4 * This library is free software; you can redistribute it and/or modify it under 5 * the terms of the GNU Lesser General Public License as published by the Free 6 * Software Foundation; either version 2.1 of the License, or (at your option) 7 * any later version. 8 * 9 * This library is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; with out even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 12 * for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public License 15 * along with this library; if not, write to the Free Software Foundation, Inc., 16 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. > 17 * http://www.gnu.org/copyleft/lesser.html > 18 * http://www.opensource.org/licenses/lgpl-license.php 19 */ 20 package net.mlw.vlh.adapter.hibernate.util.setter; 21 22 import java.text.ParseException; 23 import java.util.Calendar; 24 25 import net.sf.hibernate.HibernateException; 26 import net.sf.hibernate.Query; 27 28 import org.apache.commons.logging.Log; 29 import org.apache.commons.logging.LogFactory; 30 31 /*** 32 * @author Andrej Zachar 33 * @version $Revision: 1.5 $ $Date: 2005/09/26 09:25:09 $ 34 */ 35 public class CalendarSetter extends AbstractSetter 36 { 37 /*** 38 * Logger for this class 39 */ 40 private static final Log LOGGER = LogFactory.getLog(CalendarSetter.class); 41 42 /*** 43 * <ol> 44 * <li>If is filter value instance of the Calendar, it will set it directly 45 * to query. </li> 46 * <li>If is filter value instance of String, it try to convert it it to long and set to Calendar instance</li> 47 * <li>If is filter value instance of Long, it try to convert it it to long and set to Calendar instance</li> 48 * <li>Otherwise it will set null to query for key.</li> 49 * </ol> 50 * 51 * @see net.mlw.vlh.adapter.hibernate.util.Setter#set(net.sf.hibernate.Query, 52 * java.lang.String, java.lang.Object) 53 */ 54 public void set(Query query, String key, Object value) throws HibernateException, ParseException 55 { 56 57 Calendar calendar = null; 58 59 if (value instanceof String) 60 { 61 calendar = Calendar.getInstance(); 62 try 63 { 64 calendar.setTimeInMillis(Long.valueOf((String) value).longValue()); 65 if (LOGGER.isDebugEnabled()) 66 { 67 LOGGER.debug("The key's='" + key + "' String value='" + value + "' was converted to Calendar."); 68 } 69 } 70 catch (NumberFormatException e) 71 { 72 if (LOGGER.isWarnEnabled()) 73 { 74 LOGGER.warn("The key's='" + key + "' String value='" + value + "' was not converted to Calendar, error was:" 75 + e.getMessage()); 76 } 77 throw e; 78 } 79 } 80 else if (value instanceof Long) 81 { 82 calendar = Calendar.getInstance(); 83 calendar.setTimeInMillis(((Long) value).longValue()); 84 if (LOGGER.isDebugEnabled()) 85 { 86 LOGGER.debug("The key's='" + key + "' Long value='" + value + "' was converted to Calendar."); 87 } 88 } 89 else if (value instanceof Calendar) 90 { 91 calendar = (Calendar) value; 92 } 93 else if (value == null) 94 { 95 if (LOGGER.isInfoEnabled()) 96 { 97 LOGGER.info("The key='" + key + "'s value is null."); 98 } 99 } 100 else 101 { 102 if (LOGGER.isWarnEnabled()) 103 { 104 LOGGER.warn("The key's='" + key + "' value='" + value + "' was expected as Calendar."); 105 } 106 throw new IllegalArgumentException("Cannot convert value of class " + value.getClass().getName() + " to calendar (key=" + key 107 + ")"); 108 } 109 110 query.setCalendar(key, calendar); 111 112 if (LOGGER.isInfoEnabled()) 113 { 114 LOGGER.info("The key='" + key + "' was set to the query as Calendar='" + calendar + "'."); 115 } 116 } 117 }