RunnableWrapper.java

package sk.iway.iwcm.system.cron;

import java.lang.reflect.Method;

import sk.iway.iwcm.Adminlog;


/**
 *  RunnableWrapper.java
 *
 *  Wraps an execution of public static void main() in a Runnable interface.
 *  Necessary for transforming main() method into a cron task.
 *  @see CronFacade
 *
 *@Title        webjet7
 *@Company      Interway s.r.o. (www.interway.sk)
 *@Copyright    Interway s.r.o. (c) 2001-2010
 *@author       $Author: marosurbanec $
 *@version      $Revision: 1.3 $
 *@created      Date: 9.7.2010 16:03:51
 *@modified     $Date: 2004/08/16 06:26:11 $
 */
class RunnableWrapper implements Runnable
{
	private final Class<?> clazz;
	private final String[] args;
	private final boolean audit;
	private final Long id;

	public RunnableWrapper(Class<?> clazz, String[] args, boolean audit, Long id)
	{
		this.clazz = clazz;
		this.args = args;
		this.audit = audit;
		this.id = id;
	}

	@Override
	public void run()
	{
		try
		{
			Method main = clazz.getMethod("main", String[].class);
			Object[] arguments = new Object[]{args};

			StringBuilder argsString = new StringBuilder("");
			if (args != null && args.length>0)
			{
				for (String arg : args)
				{
					if (argsString.length()>0) argsString.append(' ');
					argsString.append(arg);
				}
			}

			if(audit) {
				int auditId = -1;
				if (id != null) auditId = id.intValue();
				Adminlog.add(Adminlog.TYPE_CRON, String.format("Cron task executed: %s [%s], id: %d", clazz.getName(), argsString, id), auditId, -1);
			}
			main.invoke(null, arguments);
		}
		catch (Exception e)
		{
			sk.iway.iwcm.Logger.println(RunnableWrapper.class, "---------FAILED TO LAUNCH A CRONTAB TASK-----------");
			sk.iway.iwcm.Logger.println(RunnableWrapper.class, clazz.getName());
			sk.iway.iwcm.Logger.error(e);
		}
	}
}