/*
 * Copyright (c) 2002-2003 by Uniclick
 * All rights reserved.
 */
package com.uniclick.xwork.converters;

import java.lang.reflect.Member;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import ognl.DefaultTypeConverter;

import com.opensymphony.xwork.util.TypeConversionException;

/**
 *
 * @author $Author: Richard HALLIER $
 * @version $Revision: 1.2 $
 */
public class DateConverter extends DefaultTypeConverter
{
	//~ Methods ////////////////////////////////////////////////////////////////

	public Object convertValue(
		Map context,
		Object o,
		Member member,
		String s,
		Object value,
		Class toType)
	{
		if( value == null )
			return null;
			
		Object result = null;

		if (toType == String.class)
		{
			if (value instanceof Date)
			{
				Date sa = (Date) value;
				
				SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
				result = sdf.format(sa);
			}
			else
				throw new UnsupportedOperationException("Conversion d'un type "+value.getClass().getName()+" en "+toType.getName()+" n'est pas implémentée.");
		}
		else if (Date.class.isAssignableFrom(toType))
		{
			if (value instanceof String || value instanceof String[])
			{
				String sa;
				
				if(value instanceof String[] )
					sa = ((String[]) value)[0];
				else
					sa = (String) value;
				
				if( sa!=null && sa.trim().length()!=0)
				{
					SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

					try
					{
						result = sdf.parse(sa);
					}
					catch (ParseException e)
					{
						throw new TypeConversionException();				
					}
				}
			}
			else
				throw new UnsupportedOperationException("Conversion d'un type "+value.getClass().getName()+" en "+toType.getName()+" n'est pas implémentée.");
		}
		else 
			throw new UnsupportedOperationException("Conversion d'une date en "+toType.getName()+" n'est pas implémentée.");

		return result;
	}
}
