EntityTypeConverter.java

package sk.iway.iwcm;

import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Locale;

import net.sourceforge.stripes.validation.TypeConverter;
import net.sourceforge.stripes.validation.ValidationError;
import sk.iway.iwcm.database.ActiveRecord;
import sk.iway.iwcm.database.JpaDB;

public class EntityTypeConverter<T extends ActiveRecord> implements TypeConverter<T>
{

	/**
	 * konvertuje id zo selectov na objekt z ciselnika
	 * db triedy ciselnikov su singletony tak prve skusa vytvarat instanciu invokovanim
	 * getInstance
	 */
	@SuppressWarnings("unchecked")
	@Override
	public T convert(String value, Class<? extends T> clazz, Collection<ValidationError> errors)
	{
		int id = Tools.getIntValue(value, 0);
		if (id>0)
		{
			String dbClassName = Tools.replace(clazz.getName(), "Bean", "DB");
			try
			{
				try
				{
				Class<? extends JpaDB<T>> dbClass = (Class<? extends JpaDB<T>>) Class.forName(dbClassName);
				Method getInstanceMethod = null;

					getInstanceMethod = dbClass.getMethod("getInstance");
					JpaDB<T> db = (JpaDB<T>)getInstanceMethod.invoke(dbClass);
					return db.getById(id);
				}
				catch (NoSuchMethodException | ClassNotFoundException nfe)
				{
					/*do nothing*/
				}

				JpaDB<T> db = (JpaDB<T>)JpaDB.of(clazz);
				return db.getById(id);

			}
			catch (Exception e)
			{
				sk.iway.iwcm.Logger.error(e);
			}
		}
		return null;
	}

	@Override
	public void setLocale(Locale arg0)
	{

	}
}