// ======================================================================== // Copyright 2006-2007 Sabre Holdings. // ------------------------------------------------------------------------ // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // ======================================================================== package org.mortbay.jetty.ant.types; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Enumeration; import java.util.Iterator; import java.util.List; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.DirectoryScanner; import org.apache.tools.ant.Project; import org.apache.tools.ant.types.FileSet; /** * Ant's WebApp object definition. * * @author Jakub Pawlowicz */ public class WebApp { /** List of web application libraries. */ private List libraries = new ArrayList(); /** List of web application class directories. */ private List classes = new ArrayList(); /** Reference to Ant project variable. */ private Project project; /** Application context path. */ private String contextPath; /** Application name. */ private String name; /** Application war file (either exploded or not). */ private File warFile; /** Location of application web.xml file. */ private File webXmlFile; /** Location of jetty-env.xml file. */ private File jettyEnvXml; /** List of extra scan targets for this web application. */ private FileSet scanTargets; /** List of optional context handlers. */ private ContextHandlers contextHandlers; private File webDefaultXmlFile; /** * Length of interval in which application will be scanned for changes (0 * means scanner wouldn't be created). */ private int scanIntervalSeconds = 0; public WebApp(Project project) { this.project = project; } public File getWebDefaultXmlFile() { return this.webDefaultXmlFile; } public void setWebDefaultXmlFile(File webDefaultXmlfile) { this.webDefaultXmlFile = webDefaultXmlfile; } public void addLib(FileSet lib) { libraries.add(lib); } public List getLibraries() { return libraries; } public void addClasses(FileSet classes) { this.classes.add(classes); } public List getClasses() { return classes; } public File getWarFile() { return warFile; } public void setWarFile(File warFile) { this.warFile = warFile; } public String getContextPath() { return contextPath; } public void setContextPath(String contextPath) { this.contextPath = contextPath; } public String getName() { return name; } public void setName(String name) { this.name = name; } /** * @return a list of classpath files (libraries and class directories). */ public List getClassPathFiles() { List classPathFiles = new ArrayList(); Iterator classesIterator = classes.iterator(); while (classesIterator.hasNext()) { FileSet clazz = (FileSet) classesIterator.next(); classPathFiles.add(clazz.getDirectoryScanner(project).getBasedir()); } Iterator iterator = libraries.iterator(); while (iterator.hasNext()) { FileSet library = (FileSet) iterator.next(); String[] includedFiles = library.getDirectoryScanner(project).getIncludedFiles(); File baseDir = library.getDirectoryScanner(project).getBasedir(); for (int i = 0; i < includedFiles.length; i++) { classPathFiles.add(new File(baseDir, includedFiles[i])); } } return classPathFiles; } /** * @return a <code>FileMatchingConfiguration</code> object describing the * configuration of all libraries added to this particular web app * (both classes and libraries). */ public FileMatchingConfiguration getLibrariesConfiguration() { FileMatchingConfiguration config = new FileMatchingConfiguration(); Iterator classesIterator = classes.iterator(); while (classesIterator.hasNext()) { FileSet clazz = (FileSet) classesIterator.next(); config.addDirectoryScanner(clazz.getDirectoryScanner(project)); } Iterator librariesIterator = libraries.iterator(); while (librariesIterator.hasNext()) { FileSet library = (FileSet) librariesIterator.next(); config.addDirectoryScanner(library.getDirectoryScanner(project)); } return config; } public FileMatchingConfiguration getScanTargetsConfiguration() { FileMatchingConfiguration configuration = new FileMatchingConfiguration(); if (scanTargets != null) { configuration.addDirectoryScanner(scanTargets.getDirectoryScanner(project)); } return configuration; } /** * @return location of web.xml file (either inside WAR or on the external * location). */ public File getWebXmlFile() { if (webXmlFile == null) { File webInf = new File(warFile, "WEB-INF"); return new File(webInf, "web.xml"); } return webXmlFile; } public void setWebXmlFile(File webXmlFile) { this.webXmlFile = webXmlFile; } public void addScanTargets(FileSet scanTargets) { if (this.scanTargets != null) { throw new BuildException("Only one <scanTargets> tag is allowed!"); } this.scanTargets = scanTargets; } public void addContextHandlers(ContextHandlers contextHandlers) { if (this.contextHandlers != null) { throw new BuildException("Only one <contextHandlers> tag is allowed!"); } this.contextHandlers = contextHandlers; } public int getScanIntervalSeconds() { return scanIntervalSeconds; } public void setScanIntervalSeconds(int scanIntervalSeconds) { this.scanIntervalSeconds = scanIntervalSeconds; } public File getJettyEnvXml() { return jettyEnvXml; } public void setJettyEnvXml(File jettyEnvXml) { this.jettyEnvXml = jettyEnvXml; } public List getContextHandlers() { return (contextHandlers != null ? contextHandlers.getContextHandlers() : new ArrayList()); } }