/*
* Copyright 2001-2008 Geert Bevin <gbevin[remove] at uwyn dot com>
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: MemoryScheduler.java 3918 2008-04-14 17:35:35Z gbevin $
*/
package com.uwyn.rife.scheduler.schedulermanagers;
import java.net.URL;
import com.uwyn.rife.resources.ResourceFinder;
import com.uwyn.rife.scheduler.Scheduler;
import com.uwyn.rife.scheduler.SchedulerFactory;
import com.uwyn.rife.scheduler.exceptions.SchedulerManagerException;
import com.uwyn.rife.scheduler.schedulermanagers.exceptions.InitializationErrorException;
import com.uwyn.rife.scheduler.schedulermanagers.exceptions.SchedulerNotFoundException;
import com.uwyn.rife.scheduler.taskmanagers.MemoryTasks;
import com.uwyn.rife.scheduler.taskoptionmanagers.MemoryTaskoptions;
import com.uwyn.rife.selector.XmlSelectorResolver;
import com.uwyn.rife.xml.exceptions.XmlErrorException;
public class MemoryScheduler implements SchedulerFactory
{
private Scheduler mScheduler = null;
private String mXmlPath = null;
private ResourceFinder mResourceFinder = null;
private Xml2MemoryScheduler mXmlMemoryScheduler = null;
public MemoryScheduler()
{
}
public MemoryScheduler(String xmlPath, ResourceFinder resourceFinder)
throws SchedulerManagerException
{
if (null == xmlPath) throw new IllegalArgumentException("xmlPath can't be null.");
if (0 == xmlPath.length()) throw new IllegalArgumentException("xmlPath can't be empty.");
if (null == resourceFinder) throw new IllegalArgumentException("resourceFinder can't be null.");
mResourceFinder = resourceFinder;
String datasource_resolved = XmlSelectorResolver.resolve(xmlPath, mResourceFinder, "rep/scheduler-");
if( null == datasource_resolved )
{
throw new SchedulerNotFoundException(xmlPath);
}
URL datasource_resource = mResourceFinder.getResource(datasource_resolved);
if( null == datasource_resource )
{
throw new SchedulerNotFoundException(xmlPath, datasource_resolved);
}
mXmlPath = datasource_resolved;
mXmlMemoryScheduler = new Xml2MemoryScheduler();
initialize();
mXmlMemoryScheduler = null;
}
public Scheduler getScheduler()
{
if (null == mScheduler)
{
mScheduler = new Scheduler(new MemoryTasks(), new MemoryTaskoptions());
}
return mScheduler;
}
private void initialize()
throws SchedulerManagerException
{
try
{
mXmlMemoryScheduler.processXml(mXmlPath, mResourceFinder);
mScheduler = mXmlMemoryScheduler.getScheduler();
}
catch (XmlErrorException e)
{
throw new InitializationErrorException(mXmlPath, e);
}
}
/**
* Retrieves the path of the XML document that populated this
* <code>MemoryScheduler</code> instance
*
* @return the path of the XML document that populated this
* <code>MemoryScheduler</code> instance
*
* @since 1.0
*/
public String getXmlPath()
{
return mXmlPath;
}
}