package org.jboss.seam.deployment;
import java.io.File;
import java.util.Set;
import javax.servlet.ServletContext;
import org.jboss.seam.log.LogProvider;
import org.jboss.seam.log.Logging;
/**
* A special deployment strategy that can be used to scan the war root. This
* is treated as a special case.
*
* @author pmuir
*
*/
public class WarRootDeploymentStrategy extends DeploymentStrategy
{
private static LogProvider log = Logging.getLogProvider(WarRootDeploymentStrategy.class);
private ClassLoader classLoader;
private ServletContext servletContext;
private File[] warRoot;
private File[] excludedDirectories;
public static final String HANDLERS_KEY = "org.jboss.seam.deployment.deploymentHandlers";
public static final String NAME = "warRootDeploymentStrategy";
private DotPageDotXmlDeploymentHandler dotPageDotXmlDeploymentHandler;
private PagesDotXmlDeploymentHandler pagesDotXmlDeploymentHandler;
public WarRootDeploymentStrategy(ClassLoader classLoader, File warRoot,ServletContext servletContext)
{
this(classLoader, warRoot,servletContext, new File[0]);
}
public WarRootDeploymentStrategy(ClassLoader classLoader, File warRoot,ServletContext servletContext, File[] excludedDirectories)
{
this.classLoader = classLoader;
this.servletContext = servletContext;
this.warRoot = new File[1];
this.excludedDirectories = excludedDirectories;
if (warRoot != null)
{
this.warRoot[0] = warRoot;
getFiles().add(warRoot);
}
else
{
log.warn("Unable to discover war root, .page.xml files won't be found");
this.warRoot = new File[0];
}
dotPageDotXmlDeploymentHandler = new DotPageDotXmlDeploymentHandler();
pagesDotXmlDeploymentHandler = new PagesDotXmlDeploymentHandler();
getDeploymentHandlers().put(DotPageDotXmlDeploymentHandler.NAME, dotPageDotXmlDeploymentHandler);
getDeploymentHandlers().put(PagesDotXmlDeploymentHandler.NAME, pagesDotXmlDeploymentHandler);
}
@Override
public ClassLoader getClassLoader()
{
return classLoader;
}
@Override
protected String getDeploymentHandlersKey()
{
return HANDLERS_KEY;
}
@Override
public void scan()
{
getScanner().scanDirectories(warRoot, excludedDirectories);
postScan();
}
public File[] getExcludedDirectories()
{
return excludedDirectories;
}
public Set<FileDescriptor> getDotPageDotXmlFileNames()
{
return dotPageDotXmlDeploymentHandler.getResources();
}
@Override
public ServletContext getServletContext()
{
return servletContext;
}
}