001/* 002 GRANITE DATA SERVICES 003 Copyright (C) 2011 GRANITE DATA SERVICES S.A.S. 004 005 This file is part of Granite Data Services. 006 007 Granite Data Services is free software; you can redistribute it and/or modify 008 it under the terms of the GNU Library General Public License as published by 009 the Free Software Foundation; either version 2 of the License, or (at your 010 option) any later version. 011 012 Granite Data Services is distributed in the hope that it will be useful, but 013 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 014 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License 015 for more details. 016 017 You should have received a copy of the GNU Library General Public License 018 along with this library; if not, see <http://www.gnu.org/licenses/>. 019*/ 020 021package org.granite.messaging.amf.io.convert.impl; 022 023import java.lang.reflect.Type; 024import java.util.Calendar; 025import java.util.Date; 026 027import org.granite.messaging.amf.io.convert.Converter; 028import org.granite.messaging.amf.io.convert.Converters; 029import org.granite.messaging.amf.io.convert.IllegalConverterArgumentException; 030import org.granite.util.TypeUtil; 031 032/** 033 * @author Franck WOLFF 034 */ 035public class Date2Date extends Converter { 036 037 public Date2Date(Converters converters) { 038 super(converters); 039 } 040 041 @Override 042 protected boolean internalCanConvert(Object value, Type targetType) { 043 Class<?> targetClass = TypeUtil.classOfType(targetType); 044 return ( 045 targetClass.isAssignableFrom(Date.class) || 046 targetClass.isAssignableFrom(Calendar.class) || 047 targetClass.isAssignableFrom(java.sql.Timestamp.class) || 048 targetClass.isAssignableFrom(java.sql.Time.class) || 049 targetClass.isAssignableFrom(java.sql.Date.class) 050 ) && ( 051 value == null || value instanceof Date 052 ); 053 } 054 055 @Override 056 protected Object internalConvert(Object value, Type targetType) { 057 058 if (value == null) 059 return null; 060 061 Date date = (Date)value; 062 Class<?> targetClass = TypeUtil.classOfType(targetType); 063 if (targetClass.isAssignableFrom(Date.class)) 064 return value; 065 066 if (targetClass.isAssignableFrom(Calendar.class)) { 067 Calendar cal = Calendar.getInstance(); 068 cal.setTime(date); 069 return cal; 070 } 071 072 if (targetClass.isAssignableFrom(java.sql.Timestamp.class)) 073 return new java.sql.Timestamp(date.getTime()); 074 075 if (targetClass.isAssignableFrom(java.sql.Date.class)) 076 return new java.sql.Date(date.getTime()); 077 078 if (targetClass.isAssignableFrom(java.sql.Time.class)) 079 return new java.sql.Time(date.getTime()); 080 081 throw new IllegalConverterArgumentException(this, value, targetType); 082 } 083}