/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.vertical.work;
import java.util.Date;
import java.util.Properties;
import org.jdom.Element;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.enonic.cms.api.plugin.ext.TaskHandler;
import com.enonic.cms.core.CalendarUtil;
import com.enonic.cms.core.plugin.ext.TaskHandlerExtensions;
public final class WorkHelper
{
private final static Logger LOG = LoggerFactory.getLogger( WorkHelper.class );
private WorkHelper()
{
}
public static void executeWork( final TaskHandlerExtensions extensions, String className, Properties props )
throws Exception
{
TaskHandler p = extensions.getByName( className.replaceAll( ".*\\.", "" ) );
if ( p != null )
{
p.execute( props );
}
else
{
LOG.error( "TaskPlugin with name: " + className + ", does not exist." );
throw new IllegalStateException( "No plugin of class, " + className + " found." );
}
}
public static Element convertToElement( WorkEntry entry )
{
Element root = new Element( "workentry" );
root.setAttribute( "key", entry.getKey() );
root.addContent( new Element( "name" ).addContent( entry.getName() ) );
root.addContent( new Element( "workclass" ).addContent( entry.getWorkClass() ) );
Element propertiesElem = new Element( "properties" );
root.addContent( propertiesElem );
String[] propertyNames = entry.getPropertyNames();
for ( int i = 0; i < propertyNames.length; i++ )
{
Element propertyElem = new Element( "property" );
propertyElem.setAttribute( "name", propertyNames[i] );
propertyElem.setAttribute( "value", entry.getProperty( propertyNames[i] ) );
propertiesElem.addContent( propertyElem );
}
Element triggerElem = new Element( "trigger" );
root.addContent( triggerElem );
triggerElem.setAttribute( "type", ( entry.getMode() == WorkEntry.SIMPLE ? "simple" : "cron" ) );
Element timeElem = new Element( "time" );
triggerElem.addContent( timeElem );
timeElem.setAttribute( "start", CalendarUtil.formatDate( entry.getStartTime().getTime(), true ) );
Date endDate = entry.getEndTime();
if ( endDate != null )
{
timeElem.setAttribute( "end", CalendarUtil.formatDate( endDate.getTime(), true ) );
}
Date nextDate = entry.getNextFireTime();
if ( nextDate != null )
{
timeElem.setAttribute( "next", CalendarUtil.formatDate( nextDate.getTime(), true ) );
}
Date previousDate = entry.getPreviousFireTime();
if ( previousDate != null )
{
timeElem.setAttribute( "previous", CalendarUtil.formatDate( previousDate.getTime(), true ) );
}
Date finalDate = entry.getFinalFireTime();
if ( finalDate != null )
{
timeElem.setAttribute( "final", CalendarUtil.formatDate( finalDate.getTime(), true ) );
}
if ( entry.getMode() == WorkEntry.SIMPLE )
{
Element repeatElem = new Element( "repeat" );
triggerElem.addContent( repeatElem );
repeatElem.setAttribute( "count", String.valueOf( entry.getRepeatCount() ) );
repeatElem.setAttribute( "interval", String.valueOf( entry.getRepeatInterval() ) );
}
else
{
Element cronElem = new Element( "cron" );
triggerElem.addContent( cronElem );
cronElem.addContent( entry.getCronExpression() );
}
return root;
}
}