diff options
Diffstat (limited to 'buildscripts/phing/classes/phing/types')
43 files changed, 0 insertions, 6784 deletions
diff --git a/buildscripts/phing/classes/phing/types/AbstractFileSet.php b/buildscripts/phing/classes/phing/types/AbstractFileSet.php deleted file mode 100644 index 6d640705..00000000 --- a/buildscripts/phing/classes/phing/types/AbstractFileSet.php +++ /dev/null @@ -1,570 +0,0 @@ -<?php -/* - * $Id: AbstractFileSet.php,v 1.15 2005/05/26 13:10:53 mrook Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -include_once 'phing/system/io/PhingFile.php'; -include_once 'phing/types/DataType.php'; -include_once 'phing/types/PatternSet.php'; -include_once 'phing/types/selectors/BaseSelector.php'; -include_once 'phing/types/selectors/SelectorContainer.php'; -include_once 'phing/types/selectors/BaseSelectorContainer.php'; - -// Load all of the selectors (not really necessary but -// helps reveal parse errors right away) - -include_once 'phing/types/selectors/AndSelector.php'; -include_once 'phing/types/selectors/ContainsSelector.php'; -include_once 'phing/types/selectors/ContainsRegexpSelector.php'; -include_once 'phing/types/selectors/DateSelector.php'; -include_once 'phing/types/selectors/DependSelector.php'; -include_once 'phing/types/selectors/DepthSelector.php'; -include_once 'phing/types/selectors/ExtendSelector.php'; -include_once 'phing/types/selectors/FilenameSelector.php'; -include_once 'phing/types/selectors/MajoritySelector.php'; -include_once 'phing/types/selectors/NoneSelector.php'; -include_once 'phing/types/selectors/NotSelector.php'; -include_once 'phing/types/selectors/OrSelector.php'; -include_once 'phing/types/selectors/PresentSelector.php'; -include_once 'phing/types/selectors/SizeSelector.php'; -include_once 'phing/types/selectors/TypeSelector.php'; - -include_once 'phing/util/DirectoryScanner.php'; - -/** - * The FileSet class provides methods and properties for accessing - * and managing filesets. It extends ProjectComponent and thus inherits - * all methods and properties (not explicitly declared). See ProjectComponent - * for further detail. - * - * TODO: - * - merge this with patternsets: FileSet extends PatternSet !!! - * requires additional mods to the parsing algo - * [HL] .... not sure if that really makes so much sense. I think - * that perhaps they should use common utility class if there really - * is that much shared functionality - * - * @author Andreas Aderhold <andi@binarycloud.com> - * @author Hans Lellelid <hans@xmpl.org> - * @version $Revision: 1.15 $ $Date: 2005/05/26 13:10:53 $ - * @see ProjectComponent - * @package phing.types - */ -class AbstractFileSet extends DataType implements SelectorContainer { - - // These vars are public for cloning purposes - - /** - * @var boolean - */ - public $useDefaultExcludes = true; - - /** - * @var PatternSet - */ - public $defaultPatterns; - - public $additionalPatterns = array(); - public $dir; - public $isCaseSensitive = true; - public $selectors = array(); - - function __construct($fileset = null) { - if ($fileset !== null && ($fileset instanceof FileSet)) { - $this->dir = $fileset->dir; - $this->defaultPatterns = $fileset->defaultPatterns; - $this->additionalPatterns = $fileset->additionalPatterns; - $this->useDefaultExcludes = $fileset->useDefaultExcludes; - $this->isCaseSensitive = $fileset->isCaseSensitive; - $this->selectors = $fileset->selectors; - } - $this->defaultPatterns = new PatternSet(); - } - - - /** - * Makes this instance in effect a reference to another PatternSet - * instance. - * You must not set another attribute or nest elements inside - * this element if you make it a reference. - */ - function setRefid(Reference $r) { - if ((isset($this->dir) && !is_null($this->dir)) || $this->defaultPatterns->hasPatterns()) { - throw $this->tooManyAttributes(); - } - if (!empty($this->additionalPatterns)) { - throw $this->noChildrenAllowed(); - } - if (!empty($this->selectors)) { - throw $this->noChildrenAllowed(); - } - parent::setRefid($r); - } - - - function setDir($dir) { - if ($this->isReference()) { - throw $this->tooManyAttributes(); - } - if ($dir instanceof PhingFile) { - $dir = $dir->getPath(); - } - $this->dir = new PhingFile((string) $dir); - } - - - function getDir(Project $p) { - if ($this->isReference()) { - return $this->getRef($p)->getDir($p); - } - return $this->dir; - } - - - function createPatternSet() { - if ($this->isReference()) { - throw $this->noChildrenAllowed(); - } - $num = array_push($this->additionalPatterns, new PatternSet()); - return $this->additionalPatterns[$num-1]; - } - - /** - * add a name entry on the include list - */ - function createInclude() { - if ($this->isReference()) { - throw $this->noChildrenAllowed(); - } - return $this->defaultPatterns->createInclude(); - } - - /** - * add a name entry on the include files list - */ - function createIncludesFile() { - if ($this->isReference()) { - throw $this->noChildrenAllowed(); - } - return $this->defaultPatterns->createIncludesFile(); - } - - /** - * add a name entry on the exclude list - */ - function createExclude() { - if ($this->isReference()) { - throw $this->noChildrenAllowed(); - } - return $this->defaultPatterns->createExclude(); - } - - /** - * add a name entry on the include files list - */ - function createExcludesFile() { - if ($this->isReference()) { - throw $this->noChildrenAllowed(); - return; - } - return $this->defaultPatterns->createExcludesFile(); - } - - /** - * Sets the set of include patterns. Patterns may be separated by a comma - * or a space. - */ - function setIncludes($includes) { - if ($this->isReference()) { - throw $this->tooManyAttributes(); - } - $this->defaultPatterns->setIncludes($includes); - } - - /** - * Sets the set of exclude patterns. Patterns may be separated by a comma - * or a space. - */ - function setExcludes($excludes) { - if ($this->isReference()) { - throw $this->tooManyAttributes(); - } - $this->defaultPatterns->setExcludes($excludes); - } - - /** - * Sets the name of the file containing the includes patterns. - * - * @param $incl The file to fetch the include patterns from. - * @throws BE - */ - function setIncludesfile($incl) { - if ($this->isReference()) { - throw $this->tooManyAttributes(); - } - $this->defaultPatterns->setIncludesfile($incl); - } - - /** - * Sets the name of the file containing the includes patterns. - * - * @param $excl The file to fetch the exclude patterns from. - * @throws BE - */ - function setExcludesfile($excl) { - if ($this->isReference()) { - throw $this->tooManyAttributes(); - } - $this->defaultPatterns->setExcludesfile($excl); - } - - /** - * Sets whether default exclusions should be used or not. - * - * @param $useDefaultExcludes "true"|"on"|"yes" when default exclusions - * should be used, "false"|"off"|"no" when they - * shouldn't be used. - */ - function setDefaultexcludes($useDefaultExcludes) { - if ($this->isReference()) { - throw $this->tooManyAttributes(); - } - $this->useDefaultExcludes = $useDefaultExcludes; - } - - /** - * Sets case sensitivity of the file system - */ - function setCaseSensitive($isCaseSensitive) { - $this->isCaseSensitive = $isCaseSensitive; - } - - /** returns a reference to the dirscanner object belonging to this fileset */ - function getDirectoryScanner(Project $p) { - if ($this->isReference()) { - $o = $this->getRef($p); - return $o->getDirectoryScanner($p); - } - - if ($this->dir === null) { - throw new BuildException("No directory specified for fileset."); - } - if (!$this->dir->exists()) { - throw new BuildException("Directory ".$this->dir->getAbsolutePath()." not found."); - } - if (!$this->dir->isDirectory()) { - throw new BuildException($this->dir->getAbsolutePath()." is not a directory."); - } - $ds = new DirectoryScanner(); - $this->setupDirectoryScanner($ds, $p); - $ds->scan(); - return $ds; - } - - /** feed dirscanner with infos defined by this fileset */ - protected function setupDirectoryScanner(DirectoryScanner $ds, Project $p) { - if ($ds === null) { - throw new Exception("DirectoryScanner cannot be null"); - } - // FIXME - pass dir directly wehn dirscanner supports File - $ds->setBasedir($this->dir->getPath()); - - foreach($this->additionalPatterns as $addPattern) { - $this->defaultPatterns->append($addPattern, $p); - } - - $ds->setIncludes($this->defaultPatterns->getIncludePatterns($p)); - $ds->setExcludes($this->defaultPatterns->getExcludePatterns($p)); - - $p->log("FileSet: Setup file scanner in dir " . $this->dir->__toString() . " with " . $this->defaultPatterns->toString(), PROJECT_MSG_DEBUG); - - if ($ds instanceof SelectorScanner) { - $ds->setSelectors($this->getSelectors($p)); - } - - if ($this->useDefaultExcludes) { - $ds->addDefaultExcludes(); - } - $ds->setCaseSensitive($this->isCaseSensitive); - } - - - /** - * Performs the check for circular references and returns the - * referenced FileSet. - */ - function getRef(Project $p) { - if (!$this->checked) { - $stk = array(); - array_push($stk, $this); - $this->dieOnCircularReference($stk, $p); - } - - $o = $this->ref->getReferencedObject($p); - if (!($o instanceof FileSet)) { - $msg = $this->ref->getRefId()." doesn't denote a fileset"; - throw new BuildException($msg); - } else { - return $o; - } - } - - // SelectorContainer methods - - /** - * Indicates whether there are any selectors here. - * - * @return boolean Whether any selectors are in this container - */ - public function hasSelectors() { - if ($this->isReference() && $this->getProject() !== null) { - return $this->getRef($this->getProject())->hasSelectors(); - } - return !empty($this->selectors); - } - - /** - * Indicates whether there are any patterns here. - * - * @return boolean Whether any patterns are in this container. - */ - public function hasPatterns() { - - if ($this->isReference() && $this->getProject() !== null) { - return $this->getRef($this->getProject())->hasPatterns(); - } - - if ($this->defaultPatterns->hasPatterns($this->getProject())) { - return true; - } - - for($i=0,$size=count($this->additionalPatterns); $i < $size; $i++) { - $ps = $this->additionalPatterns[$i]; - if ($ps->hasPatterns($this->getProject())) { - return true; - } - } - - return false; - } - - /** - * Gives the count of the number of selectors in this container - * - * @return int The number of selectors in this container - */ - public function selectorCount() { - if ($this->isReference() && $this->getProject() !== null) { - try { - return $this->getRef($this->getProject())->selectorCount(); - } catch (Exception $e) { - throw $e; - } - } - return count($this->selectors); - } - - /** - * Returns the set of selectors as an array. - * - * @return an array of selectors in this container - */ - public function getSelectors(Project $p) { - if ($this->isReference()) { - return $this->getRef($p)->getSelectors($p); - } else { - // *copy* selectors - $result = array(); - for($i=0,$size=count($this->selectors); $i < $size; $i++) { - $result[] = clone $this->selectors[$i]; - } - return $result; - } - } - - /** - * Returns an array for accessing the set of selectors. - * - * @return array The array of selectors - */ - public function selectorElements() { - if ($this->isReference() && $this->getProject() !== null) { - return $this->getRef($this->getProject())->selectorElements(); - } - return $this->selectors; - } - - /** - * Add a new selector into this container. - * - * @param selector the new selector to add - */ - public function appendSelector(FileSelector $selector) { - if ($this->isReference()) { - throw $this->noChildrenAllowed(); - } - $this->selectors[] = $selector; - } - - /* Methods below all add specific selectors */ - - /** - * add a "Select" selector entry on the selector list - */ - public function createSelector() { - $o = new SelectSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add an "And" selector entry on the selector list - */ - public function createAnd() { - $o = new AndSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add an "Or" selector entry on the selector list - */ - public function createOr() { - $o = new OrSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add a "Not" selector entry on the selector list - */ - public function createNot() { - $o = new NotSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add a "None" selector entry on the selector list - */ - public function createNone() { - $o = new NoneSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add a majority selector entry on the selector list - */ - public function createMajority() { - $o = new MajoritySelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add a selector date entry on the selector list - */ - public function createDate() { - $o = new DateSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add a selector size entry on the selector list - */ - public function createSize() { - $o = new SizeSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add a selector filename entry on the selector list - */ - public function createFilename() { - $o = new FilenameSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add an extended selector entry on the selector list - */ - public function createCustom() { - $o = new ExtendSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add a contains selector entry on the selector list - */ - public function createContains() { - $o = new ContainsSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add a contains selector entry on the selector list - */ - public function createContainsRegexp() { - $o = new ContainsRegexpSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add a present selector entry on the selector list - */ - public function createPresent() { - $o = new PresentSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add a depth selector entry on the selector list - */ - public function createDepth() { - $o = new DepthSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add a depends selector entry on the selector list - */ - public function createDepend() { - $o = new DependSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add a type selector entry on the selector list - */ - public function createType() { - $o = new TypeSelector(); - $this->appendSelector($o); - return $o; - } -} diff --git a/buildscripts/phing/classes/phing/types/Commandline.php b/buildscripts/phing/classes/phing/types/Commandline.php deleted file mode 100644 index 877179d0..00000000 --- a/buildscripts/phing/classes/phing/types/Commandline.php +++ /dev/null @@ -1,467 +0,0 @@ -<?php -/* - * $Id: Commandline.php,v 1.11 2005/05/26 13:10:53 mrook Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - - -/** - * Commandline objects help handling command lines specifying processes to - * execute. - * - * The class can be used to define a command line as nested elements or as a - * helper to define a command line by an application. - * <p> - * <code> - * <someelement><br> - * <acommandline executable="/executable/to/run"><br> - * <argument value="argument 1" /><br> - * <argument line="argument_1 argument_2 argument_3" /><br> - * <argument value="argument 4" /><br> - * </acommandline><br> - * </someelement><br> - * </code> - * The element <code>someelement</code> must provide a method - * <code>createAcommandline</code> which returns an instance of this class. - * - * @author thomas.haas@softwired-inc.com - * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> - */ -class Commandline { - - /** - * @var array CommandlineArguments[] - */ - public $arguments = array(); // public so "inner" class can access - - /** - * Full path (if not on %PATH% env var) to executable program. - * @var string - */ - public $executable; // public so "inner" class can access - - const DISCLAIMER = "The ' characters around the executable and arguments are not part of the command."; - - public function __construct($to_process = null) { - if ($to_process !== null) { - $tmp = $this->translateCommandline($to_process); - if ($tmp) { - $this->setExecutable(array_shift($tmp)); // removes first el - foreach($tmp as $arg) { // iterate through remaining elements - $this->createArgument()->setValue($arg); - } - } - } - } - - - /** - * Creates an argument object and adds it to our list of args. - * - * <p>Each commandline object has at most one instance of the - * argument class.</p> - * - * @param boolean $insertAtStart if true, the argument is inserted at the - * beginning of the list of args, otherwise it is appended. - * @return CommandlineArgument - */ - public function createArgument($insertAtStart = false) { - $argument = new CommandlineArgument($this); - if ($insertAtStart) { - array_unshift($this->arguments, $argument); - } else { - array_push($this->arguments, $argument); - } - return $argument; - } - - /** - * Sets the executable to run. - */ - public function setExecutable($executable) { - if (!$executable) { - return; - } - $this->executable = $executable; - $this->executable = strtr($this->executable, '/', DIRECTORY_SEPARATOR); - $this->executable = strtr($this->executable, '\\', DIRECTORY_SEPARATOR); - } - - public function getExecutable() { - return $this->executable; - } - - public function addArguments($line) { - foreach($line as $arg) { - $this->createArgument()->setValue($arg); - } - } - - /** - * Returns the executable and all defined arguments. - * @return array - */ - public function getCommandline() { - $args = $this->getArguments(); - if ($this->executable === null) { - return $args; - } - return array_merge(array($this->executable), $args); - } - - - /** - * Returns all arguments defined by <code>addLine</code>, - * <code>addValue</code> or the argument object. - */ - public function getArguments() { - $result = array(); - foreach($this->arguments as $arg) { - $parts = $arg->getParts(); - if ($parts !== null) { - foreach($parts as $part) { - $result[] = $part; - } - } - } - return $result; - } - - public function __toString() { - return self::toString($this->getCommandline()); - } - - /** - * Put quotes around the given String if necessary. - * - * <p>If the argument doesn't include spaces or quotes, return it - * as is. If it contains double quotes, use single quotes - else - * surround the argument by double quotes.</p> - * - * @exception BuildException if the argument contains both, single - * and double quotes. - */ - public static function quoteArgument($argument) { - if (strpos($argument, "\"") !== false) { - if (strpos($argument, "'") !== false) { - throw new BuildException("Can't handle single and double quotes in same argument"); - } else { - return escapeshellarg($argument); - } - } elseif (strpos($argument, "'") !== false || strpos($argument, " ") !== false) { - return escapeshellarg($argument); - //return '\"' . $argument . '\"'; - } else { - return $argument; - } - } - - /** - * Quotes the parts of the given array in way that makes them - * usable as command line arguments. - */ - public static function toString($lines) { - // empty path return empty string - if (!$lines) { - return ""; - } - - // path containing one or more elements - $result = ""; - for ($i = 0, $len=count($lines); $i < $len; $i++) { - if ($i > 0) { - $result .= ' '; - } - $result .= self::quoteArgument($lines[$i]); - } - return $result; - } - - /** - * - * @param string $to_process - * @return array - */ - public static function translateCommandline($to_process) { - - if (!$to_process) { - return array(); - } - - // parse with a simple finite state machine - - $normal = 0; - $inQuote = 1; - $inDoubleQuote = 2; - - $state = $normal; - $args = array(); - $current = ""; - $lastTokenHasBeenQuoted = false; - - $tok = strtok($to_process, ""); - $tokens = preg_split('/(["\' ])/', $to_process, -1, PREG_SPLIT_DELIM_CAPTURE); - while(($nextTok = array_shift($tokens)) !== null) { - switch ($state) { - case $inQuote: - if ("'" == $nextTok) { - $lastTokenHasBeenQuoted = true; - $state = $normal; - } else { - $current .= $nextTok; - } - break; - case $inDoubleQuote: - if ("\"" == $nextTok) { - $lastTokenHasBeenQuoted = true; - $state = $normal; - } else { - $current .= $nextTok; - } - break; - default: - if ("'" == $nextTok) { - $state = $inQuote; - } elseif ("\"" == $nextTok) { - $state = $inDoubleQuote; - } elseif (" " == $nextTok) { - if ($lastTokenHasBeenQuoted || strlen($current) != 0) { - $args[] = $current; - $current = ""; - } - } else { - $current .= $nextTok; - } - $lastTokenHasBeenQuoted = false; - break; - } - } - - if ($lastTokenHasBeenQuoted || strlen($current) != 0) { - $args[] = $current; - } - - if ($state == $inQuote || $state == $inDoubleQuote) { - throw new BuildException("unbalanced quotes in " . $to_process); - } - - return $args; - } - - /** - * @return int Number of components in current commandline. - */ - public function size() { - return count($this->getCommandline()); - } - - public function __copy() { - $c = new Commandline(); - $c->setExecutable($this->executable); - $c->addArguments($this->getArguments()); - return $c; - } - - /** - * Clear out the whole command line. */ - public function clear() { - $this->executable = null; - $this->arguments->removeAllElements(); - } - - /** - * Clear out the arguments but leave the executable in place for - * another operation. - */ - public function clearArgs() { - $this->arguments = array(); - } - - /** - * Return a marker. - * - * <p>This marker can be used to locate a position on the - * commandline - to insert something for example - when all - * parameters have been set.</p> - * @return CommandlineMarker - */ - public function createMarker() { - return new CommandlineMarker($this, count($this->arguments)); - } - - /** - * Returns a String that describes the command and arguments - * suitable for verbose output before a call to - * <code>Runtime.exec(String[])<code>. - * - * <p>This method assumes that the first entry in the array is the - * executable to run.</p> - * @param array $args CommandlineArgument[] to use - * @return string - */ - public function describeCommand($args = null) { - - if ($args === null) { - $args = $this->getCommandline(); - } - - if (!$args) { - return ""; - } - - $buf = "Executing '"; - $buf .= $args[0]; - $buf .= "'"; - if (count($args) > 0) { - $buf .= " with "; - $buf .= $this->describeArguments($args, 1); - } else { - $buf .= self::DISCLAIMER; - } - return $buf; - } - - /** - * Returns a String that describes the arguments suitable for - * verbose output before a call to - * <code>Runtime.exec(String[])<code> - * @param $args arguments to use (default is to use current class args) - * @param $offset ignore entries before this index - * @return string - */ - protected function describeArguments($args = null, $offset = 0) { - if ($args === null) { - $args = $this->getArguments(); - } - - if ($args === null || count($args) <= $offset) { - return ""; - } - - $buf = "argument"; - if (count($args) > $offset) { - $buf .= "s"; - } - $buf .= ":" . Phing::getProperty("line.separator"); - for ($i = $offset, $alen=count($args); $i < $alen; $i++) { - $buf .= "'" . $args[$i] . "'" . Phing::getProperty("line.separator"); - } - $buf .= self::DISCLAIMER; - return $buf; - } -} - - -/** - * "Inner" class used for nested xml command line definitions. - */ -class CommandlineArgument { - - private $parts = array(); - private $outer; - - public function __construct(Commandline $outer) { - $this->outer = $outer; - } - - /** - * Sets a single commandline argument. - * - * @param string $value a single commandline argument. - */ - public function setValue($value) { - $this->parts = array($value); - } - - /** - * Line to split into several commandline arguments. - * - * @param line line to split into several commandline arguments - */ - public function setLine($line) { - if ($line === null) { - return; - } - $this->parts = $this->outer->translateCommandline($line); - } - - /** - * Sets a single commandline argument and treats it like a - * PATH - ensures the right separator for the local platform - * is used. - * - * @param value a single commandline argument. - */ - public function setPath($value) { - $this->parts = array( (string) $value ); - } - - /** - * Sets a single commandline argument to the absolute filename - * of the given file. - * - * @param value a single commandline argument. - */ - public function setFile(PhingFile $value) { - $this->parts = array($value->getAbsolutePath()); - } - - /** - * Returns the parts this Argument consists of. - * @return array string[] - */ - public function getParts() { - return $this->parts; - } -} - -/** - * Class to keep track of the position of an Argument. - */ -// <p>This class is there to support the srcfile and targetfile -// elements of <execon> and <transform> - don't know -// whether there might be additional use cases.</p> --SB -class CommandlineMarker { - - private $position; - private $realPos = -1; - private $outer; - - public function __construct(Comandline $outer, $position) { - $this->outer = $outer; - $this->position = $position; - } - - /** - * Return the number of arguments that preceeded this marker. - * - * <p>The name of the executable - if set - is counted as the - * very first argument.</p> - */ - public function getPosition() { - if ($this->realPos == -1) { - $realPos = ($this->outer->executable === null ? 0 : 1); - for ($i = 0; $i < $position; $i++) { - $arg = $this->arguments[$i]; - $realPos += count($arg->getParts()); - } - } - return $this->realPos; - } -} - diff --git a/buildscripts/phing/classes/phing/types/DataType.php b/buildscripts/phing/classes/phing/types/DataType.php deleted file mode 100644 index 2c06b80d..00000000 --- a/buildscripts/phing/classes/phing/types/DataType.php +++ /dev/null @@ -1,182 +0,0 @@ -<?php -/* - * $Id: DataType.php,v 1.9 2005/11/02 13:55:34 hlellelid Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -require_once 'phing/ProjectComponent.php'; -include_once 'phing/BuildException.php'; - -/** - * Base class for those classes that can appear inside the build file - * as stand alone data types. - * - * This class handles the common description attribute and provides - * a default implementation for reference handling and checking for - * circular references that is appropriate for types that can not be - * nested inside elements of the same type (i.e. patternset but not path) - * - * @package phing.types - */ -class DataType extends ProjectComponent { - - /** The descriptin the user has set. */ - public $description = null; - - /** Value to the refid attribute. Type of Reference*/ - public $ref = null; - - /** - * Are we sure we don't hold circular references? - * - * Subclasses are responsible for setting this value to false - * if we'd need to investigate this condition (usually because a - * child element has been added that is a subclass of DataType). - * @var boolean - */ - protected $checked = true; - - /** - * Sets a description of the current data type. It will be useful - * in commenting what we are doing. - */ - function setDescription($desc) { - $this->description = (string) $desc; - } - - /** Return the description for the current data type. */ - function getDescription() { - return $this->description; - } - - /** Has the refid attribute of this element been set? */ - function isReference() { - return ($this->ref !== null); - } - - /** - * Set the value of the refid attribute. - * - * Subclasses may need to check whether any other attributes - * have been set as well or child elements have been created and - * thus override this method. if they do they must call parent::setRefid() - * - * @param Reference $r - * @return void - */ - function setRefid(Reference $r) { - $this->ref = $r; - $this->checked = false; - } - - /** - * Check to see whether any DataType we hold references to is - * included in the Stack (which holds all DataType instances that - * directly or indirectly reference this instance, including this - * instance itself). - * - * If one is included, throw a BuildException created by circularReference - * - * This implementation is appropriate only for a DataType that - * cannot hold other DataTypes as children. - * - * The general contract of this method is that it shouldn't do - * anything if checked is true and set it to true on exit. - */ - function dieOnCircularReference(&$stk, Project $p) { - if ($this->checked || !$this->isReference()) { - return; - } - - $o = $this->ref->getReferencedObject($p); - - if ($o instanceof DataType) { - - // TESTME - make sure that in_array() works just as well here - // - // check if reference is in stack - //$contains = false; - //for ($i=0, $size=count($stk); $i < $size; $i++) { - // if ($stk[$i] === $o) { - // $contains = true; - // break; - // } - //} - - if (in_array($o, $stk, true)) { - // throw build exception - throw $this->circularReference(); - } else { - array_push($stk, $o); - $o->dieOnCircularReference($stk, $p); - array_pop($stk); - } - } - $this->checked = true; - } - - /** Performs the check for circular references and returns the referenced object. */ - function getCheckedRef($requiredClass, $dataTypeName) { - - if (!$this->checked) { - // should be in stack - $stk = array(); - $stk[] = $this; - $this->dieOnCircularReference($stk, $this->getProject()); - } - - $o = $this->ref->getReferencedObject($this->getProject()); - if (!($o instanceof $requiredClass) ) { - throw new BuildException($this->ref->getRefId()." doesn't denote a " . $dataTypeName); - } else { - return $o; - } - } - - /** - * Creates an exception that indicates that refid has to be the - * only attribute if it is set. - */ - function tooManyAttributes() { - return new BuildException( "You must not specify more than one attribute when using refid" ); - } - - /** - * Creates an exception that indicates that this XML element must - * not have child elements if the refid attribute is set. - */ - function noChildrenAllowed() { - return new BuildException("You must not specify nested elements when using refid"); - } - - /** - * Creates an exception that indicates the user has generated a - * loop of data types referencing each other. - */ - function circularReference() { - return new BuildException("This data type contains a circular reference."); - } - - /** - * Template method being called when the data type has been - * parsed completely. - * @return void - */ - function parsingComplete() {} -} - diff --git a/buildscripts/phing/classes/phing/types/Description.php b/buildscripts/phing/classes/phing/types/Description.php deleted file mode 100644 index e69f8da4..00000000 --- a/buildscripts/phing/classes/phing/types/Description.php +++ /dev/null @@ -1,53 +0,0 @@ -<?php - -/* - * $Id: Description.php,v 1.4 2003/12/24 12:38:42 hlellelid Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -/** - * Description is used to provide a project-wide description element - * (that is, a description that applies to a buildfile as a whole). - * If present, the <description> element is printed out before the - * target descriptions. - * - * Description has no attributes, only text. There can only be one - * project description per project. A second description element will - * overwrite the first. - * - * @author Hans Lellelid <hans@xmpl.org> (Phing) - * @author Craeg Strong <cstrong@arielpartners.com> (Ant) - * @package phing.types - */ -class Description extends DataType { - - /** - * Adds descriptive text to the project. - * - * @return void - */ - public function addText($text) { - $currentDescription = $this->project->getDescription(); - if ($currentDescription === null) { - $this->project->setDescription($text); - } else { - $this->project->setDescription($currentDescription . $text); - } - } - -} diff --git a/buildscripts/phing/classes/phing/types/DirSet.php b/buildscripts/phing/classes/phing/types/DirSet.php deleted file mode 100644 index 45bcc636..00000000 --- a/buildscripts/phing/classes/phing/types/DirSet.php +++ /dev/null @@ -1,49 +0,0 @@ -<?php - -/* - * $Id: DirSet.php,v 1.3 2003/11/19 05:48:30 hlellelid Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -include_once 'phing/types/AbstractFileSet.php'; - -/** - * Subclass as hint for supporting tasks that the included directories - * instead of files should be used. - * - * @package phing.types - */ -class DirSet extends AbstractFileSet { - - public function __construct($dirset = null) { - parent::__construct($dirset); - } - - /** - * Return a DirSet that has the same basedir and same patternsets - * as this one. - */ - public function __clone() { - if ($this->isReference()) { - return new DirSet($this->getRef($this->getProject())); - } else { - return new DirSet($this); - } - } - -} diff --git a/buildscripts/phing/classes/phing/types/FileList.php b/buildscripts/phing/classes/phing/types/FileList.php deleted file mode 100644 index 1ec1273f..00000000 --- a/buildscripts/phing/classes/phing/types/FileList.php +++ /dev/null @@ -1,223 +0,0 @@ -<?php -/* - * $Id: FileList.php,v 1.10 2005/11/01 15:26:09 hlellelid Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -require_once 'phing/types/DataType.php'; -include_once 'phing/system/io/PhingFile.php'; - -/** - * FileList represents an explicitly named list of files. FileLists - * are useful when you want to capture a list of files regardless of - * whether they currently exist. - * - * <filelist - * id="docfiles" - * dir="${phing.docs.dir}" - * files="chapters/Installation.html,chapters/Setup.html"/> - * - * OR - * - * <filelist - * dir="${doc.src.dir}" - * listfile="${phing.docs.dir}/PhingGuide.book"/> - * - * (or a mixture of files="" and listfile="" can be used) - * - * @author Hans Lellelid <hans@xmpl.org> - * @version $Revision: 1.10 $ - * @package phing.types - */ -class FileList extends DataType { - - // public for "cloning" purposes - - /** Array containing all filenames. */ - public $filenames = array(); - - /** Base directory for this file list. */ - public $dir; - - /** PhingFile that contains a list of files (one per line). */ - public $listfile; - - /** - * Construct a new FileList. - * @param array $filelist; - */ - function __construct($filelist = null) { - if ($filelist !== null) { - $this->dir = $filelist->dir; - $this->filenames = $filelist->filenames; - $this->listfile = $filelist->listfile; - } - } - - /** - * Makes this instance in effect a reference to another FileList - * instance. - */ - function setRefid(Reference $r) { - if ($this->dir !== null || count($this->filenames) !== 0) { - throw $this->tooManyAttributes(); - } - parent::setRefid($r); - } - - /** - * Base directory for files in list. - * @param PhingFile $dir - */ - function setDir(PhingFile $dir) { - if ($this->isReference()) { - throw $this->tooManyAttributes(); - } - if (!($dir instanceof PhingFile)) { - $dir = new PhingFile($dir); - } - $this->dir = $dir; - } - - /** - * Get the basedir for files in list. - * @return PhingFile - */ - function getDir(Project $p) { - if ($this->isReference()) { - $ref = $this->getRef($p); - return $ref->getDir($p); - } - return $this->dir; - } - - /** - * Set the array of files in list. - * @param array $filenames - */ - function setFiles($filenames) { - if ($this->isReference()) { - throw $this->tooManyAttributes(); - } - if (!empty($filenames)) { - $tok = strtok($filenames, ", \t\n\r"); - while ($tok !== false) { - $fname = trim($tok); - if ($fname !== "") { - $this->filenames[] = $tok; - } - $tok = strtok(", \t\n\r"); - } - } - } - - /** - * Sets a source "list" file that contains filenames to add -- one per line. - * @param string $file - */ - function setListFile($file) { - if ($this->isReference()) { - throw $this->tooManyAttributes(); - } - if (!($file instanceof PhingFile)) { - $file = new PhingFile($file); - } - $this->listfile = $file; - } - - /** - * Get the source "list" file that contains file names. - * @return PhingFile - */ - function getListFile() { - if ($this->isReference()) { - $ref = $this->getRef($p); - return $ref->getListFile($p); - } - return $this->listfile; - } - - /** - * Returns the list of files represented by this FileList. - * @param Project $p - * @return array - */ - function getFiles(Project $p) { - - if ($this->isReference()) { - $ret = $this->getRef($p); - $ret = $ret->getFiles($p); - return $ret; - } - - if ($this->listfile !== null) { - $this->readListFile($p); - } - - return $this->filenames; - } - - - /** - * Performs the check for circular references and returns the - * referenced FileSet. - * @param Project $p - */ - function getRef(Project $p) { - if (!$this->checked) { - $stk = array(); - array_push($stk, $this); - $this->dieOnCircularReference($stk, $p); - } - - $o = $this->ref->getReferencedObject($p); - if (!($o instanceof FileList)) { - throw new BuildException($this->ref->getRefId()." doesn't denote a filelist"); - } else { - return $o; - } - } - - /** - * Reads file names from a file and adds them to the files array. - * @param Project $p - */ - private function readListFile(Project $p) { - $listReader = null; - try { - // Get a FileReader - $listReader = new BufferedReader(new FileReader($this->listfile)); - - $line = $listReader->readLine(); - while ($line !== null) { - if (!empty($line)) { - $line = $p->replaceProperties($line); - $this->filenames[] = trim($line); - } - $line = $listReader->readLine(); - } - } catch (Exception $e) { - if ($listReader) $listReader->close(); - throw new BuildException("An error occured while reading from list file " . $this->listfile->__toString() . ": " . $e->getMessage()); - } - - $listReader->close(); - } - -} - diff --git a/buildscripts/phing/classes/phing/types/FileSet.php b/buildscripts/phing/classes/phing/types/FileSet.php deleted file mode 100644 index 8cfb54dc..00000000 --- a/buildscripts/phing/classes/phing/types/FileSet.php +++ /dev/null @@ -1,56 +0,0 @@ -<?php - -/* - * $Id: FileSet.php,v 1.5 2003/12/24 12:38:42 hlellelid Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -require_once 'phing/types/AbstractFileSet.php'; - -/** - * Moved out of MatchingTask to make it a standalone object that could - * be referenced (by scripts for example). - * - * @author Hans Lellelid <hans@xmpl.org> (Phing) - * @author Arnout J. Kuiper <ajkuiper@wxs.nl> (Ant) - * @author Stefano Mazzocchi <stefano@apache.org> (Ant) - * @author Sam Ruby <rubys@us.ibm.com> (Ant) - * @author Jon S. Stevens <jon@clearink.com> (Ant) - * @author Stefan Bodewig <stefan.bodewig@epost.de> (Ant) - * @author Magesh Umasankar (Ant) - * @package phing.types - */ -class FileSet extends AbstractFileSet { - - function __construct($fileset = null) { - parent::__construct($fileset); - } - - /** - * Return a FileSet that has the same basedir and same patternsets - * as this one. - */ - public function __clone() { - if ($this->isReference()) { - return new FileSet($this->getRef($this->getProject())); - } else { - return new FileSet($this); - } - } - -} diff --git a/buildscripts/phing/classes/phing/types/FilterChain.php b/buildscripts/phing/classes/phing/types/FilterChain.php deleted file mode 100644 index 4f2d702b..00000000 --- a/buildscripts/phing/classes/phing/types/FilterChain.php +++ /dev/null @@ -1,164 +0,0 @@ -<?php -/* - * $Id: FilterChain.php,v 1.11 2005/12/08 16:03:49 hlellelid Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -include_once 'phing/types/DataType.php'; -include_once 'phing/filters/HeadFilter.php'; -include_once 'phing/filters/TailFilter.php'; -include_once 'phing/filters/LineContains.php'; -include_once 'phing/filters/LineContainsRegexp.php'; -include_once 'phing/filters/ExpandProperties.php'; -include_once 'phing/filters/PrefixLines.php'; -include_once 'phing/filters/ReplaceRegexp.php'; -include_once 'phing/filters/ReplaceTokens.php'; -include_once 'phing/filters/StripPhpComments.php'; -include_once 'phing/filters/StripLineBreaks.php'; -include_once 'phing/filters/StripLineComments.php'; -include_once 'phing/filters/TabToSpaces.php'; -include_once 'phing/filters/TidyFilter.php'; -include_once 'phing/filters/TranslateGettext.php'; -include_once 'phing/filters/XsltFilter.php'; - -/* - * FilterChain may contain a chained set of filter readers. - * - * @author Yannick Lecaillez <yl@seasonfive.com> - * @version $Revision: 1.11 $ - * @package phing.types - */ -class FilterChain extends DataType { - - private $filterReaders = array(); - - function __construct(Project $project) { - $this->project = $project; - } - - function getFilterReaders() { - return $this->filterReaders; - } - - function addExpandProperties(ExpandProperties $o) { - $o->setProject($this->project); - $this->filterReaders[] = $o; - } - - function addGettext(TranslateGettext $o) { - $o->setProject($this->project); - $this->filterReaders[] = $o; - } - - function addHeadFilter(HeadFilter $o) { - $o->setProject($this->project); - $this->filterReaders[] = $o; - } - - function addTailFilter(TailFilter $o) { - $o->setProject($this->project); - $this->filterReaders[] = $o; - } - - function addLineContains(LineContains $o) { - $o->setProject($this->project); - $this->filterReaders[] = $o; - } - - function addLineContainsRegExp(LineContainsRegExp $o) { - $o->setProject($this->project); - $this->filterReaders[] = $o; - } - - function addPrefixLines(PrefixLines $o) { - $o->setProject($this->project); - $this->filterReaders[] = $o; - } - - function addReplaceTokens(ReplaceTokens $o) { - $o->setProject($this->project); - $this->filterReaders[] = $o; - } - - function addReplaceRegexp(ReplaceRegexp $o) { - $o->setProject($this->project); - $this->filterReaders[] = $o; - } - - function addStripPhpComments(StripPhpComments $o) { - $o->setProject($this->project); - $this->filterReaders[] = $o; - } - - function addStripLineBreaks(StripLineBreaks $o) { - $o->setProject($this->project); - $this->filterReaders[] = $o; - } - - function addStripLineComments(StripLineComments $o) { - $o->setProject($this->project); - $this->filterReaders[] = $o; - } - - function addTidyFilter(TidyFilter $o) { - $o->setProject($this->project); - $this->filterReaders[] = $o; - } - - function addTabToSpaces(TabToSpaces $o) { - $o->setProject($this->project); - $this->filterReaders[] = $o; - } - - function addXsltFilter(XsltFilter $o) { - $o->setProject($this->project); - $this->filterReaders[] = $o; - } - - function addFilterReader(PhingFilterReader $o) { - $o->setProject($this->project); - $this->filterReaders[] = $o; - } - - /* - * Makes this instance in effect a reference to another FilterChain - * instance. - * - * <p>You must not set another attribute or nest elements inside - * this element if you make it a reference.</p> - * - * @param r the reference to which this instance is associated - * @throw BuildException if this instance already has been configured. - */ - function setRefid(Reference $r) { - - if ( count($this->filterReaders) === 0 ) { - throw $this->tooManyAttributes(); - } - - // change this to get the objects from the other reference - $o = $r->getReferencedObject($this->getProject()); - if ( $o instanceof FilterChain ) { - $this->filterReaders = $o->getFilterReaders(); - } else { - throw new BuildException($r->getRefId()." doesn't refer to a FilterChain"); - } - parent::setRefid($r); - } - -} diff --git a/buildscripts/phing/classes/phing/types/Mapper.php b/buildscripts/phing/classes/phing/types/Mapper.php deleted file mode 100644 index f0df6d24..00000000 --- a/buildscripts/phing/classes/phing/types/Mapper.php +++ /dev/null @@ -1,207 +0,0 @@ -<?php -/* - * $Id: Mapper.php,v 1.11 2004/03/15 17:11:16 hlellelid Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -include_once 'phing/types/DataType.php'; -include_once 'phing/types/Path.php'; - -/** - * Filename Mapper maps source file name(s) to target file name(s). - * - * Built-in mappers can be accessed by specifying they "type" attribute: - * <code> - * <mapper type="glob" from="*.php" to="*.php.bak"/> - * </code> - * Custom mappers can be specified by providing a dot-path to a include_path-relative - * class: - * <code> - * <mapper classname="myapp.mappers.DevToProdMapper" from="*.php" to="*.php"/> - * <!-- maps all PHP files from development server to production server, for example --> - * </code> - * - * @author Hans Lellelid <hans@xmpl.org> - * @package phing.types - */ -class Mapper extends DataType { - - protected $type; - protected $classname; - protected $from; - protected $to; - protected $classpath; - protected $classpathId; - - - function __construct(Project $project) { - $this->project = $project; - } - - /** - * Set the classpath to be used when searching for component being defined - * - * @param Path $classpath An Path object containing the classpath. - */ - public function setClasspath(Path $classpath) { - if ($this->isReference()) { - throw $this->tooManyAttributes(); - } - if ($this->classpath === null) { - $this->classpath = $classpath; - } else { - $this->classpath->append($classpath); - } - } - - /** - * Create the classpath to be used when searching for component being defined - */ - public function createClasspath() { - if ($this->isReference()) { - throw $this->tooManyAttributes(); - } - if ($this->classpath === null) { - $this->classpath = new Path($this->project); - } - return $this->classpath->createPath(); - } - - /** - * Reference to a classpath to use when loading the files. - */ - public function setClasspathRef(Reference $r) { - if ($this->isReference()) { - throw $this->tooManyAttributes(); - } - $this->classpathId = $r->getRefId(); - $this->createClasspath()->setRefid($r); - } - - /** Set the type of FileNameMapper to use. */ - function setType($type) { - if ($this->isReference()) { - throw $this->tooManyAttributes(); - } - $this->type = $type; - } - - /** Set the class name of the FileNameMapper to use. */ - function setClassname($classname) { - if ($this->isReference()) { - throw $this->tooManyAttributes(); - } - $this->classname = $classname; - } - - /** - * Set the argument to FileNameMapper.setFrom - */ - function setFrom($from) { - if ($this->isReference()) { - throw $this->tooManyAttributes(); - } - $this->from = $from; - } - - /** - * Set the argument to FileNameMapper.setTo - */ - function setTo($to) { - if ($this->isReference()) { - throw $this->tooManyAttributes(); - } - $this->to = $to; - } - - /** - * Make this Mapper instance a reference to another Mapper. - * - * You must not set any other attribute if you make it a reference. - */ - function setRefid($r) { - if ($this->type !== null || $this->from !== null || $this->to !== null) { - throw DataType::tooManyAttributes(); - } - parent::setRefid($r); - } - - /** Factory, returns inmplementation of file name mapper as new instance */ - function getImplementation() { - if ($this->isReference()) { - $tmp = $this->getRef(); - return $tmp->getImplementation(); - } - - if ($this->type === null && $this->classname === null) { - throw new BuildException("either type or classname attribute must be set for <mapper>"); - } - - if ($this->type !== null) { - switch($this->type) { - case 'identity': - $this->classname = 'phing.mappers.IdentityMapper'; - break; - case 'flatten': - $this->classname = 'phing.mappers.FlattenMapper'; - break; - case 'glob': - $this->classname = 'phing.mappers.GlobMapper'; - break; - case 'regexp': - case 'regex': - $this->classname = 'phing.mappers.RegexpMapper'; - break; - case 'merge': - $this->classname = 'phing.mappers.MergeMapper'; - break; - default: - throw new BuildException("Mapper type {$this->type} not known"); - break; - } - } - - // get the implementing class - $cls = Phing::import($this->classname, $this->classpath); - - $m = new $cls; - $m->setFrom($this->from); - $m->setTo($this->to); - - return $m; - } - - /** Performs the check for circular references and returns the referenced Mapper. */ - private function getRef() { - if (!$this->checked) { - $stk = array(); - $stk[] = $this; - $this->dieOnCircularReference($stk, $this->project); - } - - $o = $this->ref->getReferencedObject($this->project); - if (!($o instanceof Mapper)) { - $msg = $this->ref->getRefId()." doesn't denote a mapper"; - throw new BuildException($msg); - } else { - return $o; - } - } -} - -?> diff --git a/buildscripts/phing/classes/phing/types/Parameter.php b/buildscripts/phing/classes/phing/types/Parameter.php deleted file mode 100644 index 6892ed7e..00000000 --- a/buildscripts/phing/classes/phing/types/Parameter.php +++ /dev/null @@ -1,99 +0,0 @@ -<?php -/* - * $Id: Parameter.php,v 1.6 2005/10/05 20:23:22 hlellelid Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. -*/ - -include_once 'phing/types/DataType.php'; - -/* - * A parameter is composed of a name, type and value. Nested - * Parameters are also possible, but the using task/type has - * to support them - * - * @author Manuel Holtgrewe - * @author <a href="mailto:yl@seasonfive.com">Yannick Lecaillez</a> - * @package phing.types -*/ -class Parameter extends DataType { - - /** Parameter name */ - protected $name; - - /** Paramter type */ - protected $type; - - /** Parameter value */ - protected $value; - - /** Nested parameters */ - protected $parameters = array(); - - function setName($name) { - $this->name = (string) $name; - } - - function setType($type) { - $this->type = (string) $type; - } - - /** - * Sets value to dynamic register slot. - * @param RegisterSlot $value - */ - public function setListeningValue(RegisterSlot $value) { - $this->value = $value; - } - - function setValue($value) { - $this->value = (string) $value; - } - - function getName() { - return $this->name; - } - - function getType() { - return $this->type; - } - - function getValue() { - if ($this->value instanceof RegisterSlot) { - return $this->value->getValue(); - } else { - return $this->value; - } - } - - /** - * @return Parameter - */ - function createParam() { - $num = array_push($this->parameters, new Parameter()); - return $this->parameters[$num-1]; - } - - /** - * @return array Nested parameters. - */ - function getParams() { - return $this->parameters; - } -} - -?> diff --git a/buildscripts/phing/classes/phing/types/Parameterizable.php b/buildscripts/phing/classes/phing/types/Parameterizable.php deleted file mode 100644 index b24aa38b..00000000 --- a/buildscripts/phing/classes/phing/types/Parameterizable.php +++ /dev/null @@ -1,32 +0,0 @@ -<?php - -/* - * $Id: Parameterizable.php,v 1.3 2003/11/19 05:48:30 hlellelid Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -/** - * Parameterizable objects take genric key value pairs. - * - * @author Hans Lellelid, hans@xmpl.org (Phing) - * @author Magesh Umasankar (Ant) - * @package phing.types - */ -interface Parameterizable { - function setParameters($parameters); -} diff --git a/buildscripts/phing/classes/phing/types/Path.php b/buildscripts/phing/classes/phing/types/Path.php deleted file mode 100644 index 196fe9c4..00000000 --- a/buildscripts/phing/classes/phing/types/Path.php +++ /dev/null @@ -1,456 +0,0 @@ -<?php -/* - * $Id: Path.php,v 1.13 2005/05/26 13:10:53 mrook Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -require_once 'phing/types/DataType.php'; -include_once 'phing/util/PathTokenizer.php'; -include_once 'phing/types/FileSet.php'; - -/** - * This object represents a path as used by include_path or PATH - * environment variable. - * - * This class has been adopted from the Java Ant equivalent. The ability have - * path structures in Phing is important; however, because of how PHP classes interact - * the ability to specify CLASSPATHs makes less sense than Java.Rather than providing - * CLASSPATH for any tasks that take classes as parameters, perhaps a better - * solution in PHP is to have an IncludePath task, which prepends paths to PHP's include_path - * INI variable. This gets around the problem that simply using a path to load the initial - * PHP class is not enough (in most cases the loaded class may assume that it is on the global - * PHP include_path, and will try to load dependent classes accordingly). The other option is - * to provide a way for this class to add paths to the include path, if desired -- or to create - * an IncludePath subclass. Once added, though, when would a path be removed from the include path? - * - * <p> - * <code> - * <sometask><br> - * <somepath><br> - * <pathelement location="/path/to/file" /><br> - * <pathelement path="/path/to/class2;/path/to/class3" /><br> - * <pathelement location="/path/to/file3" /><br> - * </somepath><br> - * </sometask><br> - * </code> - * <p> - * The object implemention <code>sometask</code> must provide a method called - * <code>createSomepath</code> which returns an instance of <code>Path</code>. - * Nested path definitions are handled by the Path object and must be labeled - * <code>pathelement</code>.<p> - * - * The path element takes a parameter <code>path</code> which will be parsed - * and split into single elements. It will usually be used - * to define a path from an environment variable. - * - * @author Hans Lellelid <hans@xmpl.org> (Phing) - * @author Thomas.Haas@softwired-inc.com (Ant) - * @author Stefan Bodewig <stefan.bodewig@epost.de> (Ant) - * @package phing.types - */ -class Path extends DataType { - - private $elements = array(); - - /** - * Constructor for internally instantiated objects sets project. - * @param Project $project - * @param string $path (for use by IntrospectionHelper) - */ - public function __construct($project = null, $path = null) { - if ($project !== null) { - $this->setProject($project); - } - if ($path !== null) { - $this->createPathElement()->setPath($path); - } - } - - /** - * Adds a element definition to the path. - * @param $location the location of the element to add (must not be - * <code>null</code> nor empty. - * @throws BuildException - */ - public function setDir(PhingFile $location) { - if ($this->isReference()) { - throw $this->tooManyAttributes(); - } - $this->createPathElement()->setDir($location); - } - - /** - * Parses a path definition and creates single PathElements. - * @param path the path definition. - * @throws BuildException - */ - public function setPath($path) { - if ($this->isReference()) { - throw $this->tooManyAttributes(); - } - $this->createPathElement()->setPath($path); - } - - /** - * Makes this instance in effect a reference to another Path instance. - * - * <p>You must not set another attribute or nest elements inside - * this element if you make it a reference.</p> - * @throws BuildException - */ - public function setRefid(Reference $r) { - if (!empty($this->elements)) { - throw $this->tooManyAttributes(); - } - $this->elements[] = $r; - parent::setRefid($r); - } - - /** - * Creates the nested <code><pathelement></code> element. - * @throws BuildException - */ - public function createPathElement() { - if ($this->isReference()) { - throw $this->noChildrenAllowed(); - } - $pe = new PathElement($this); - $this->elements[] = $pe; - return $pe; - } - - /** - * Adds a nested <code><fileset></code> element. - * @throws BuildException - */ - public function addFileset(FileSet $fs) { - if ($this->isReference()) { - throw $this->noChildrenAllowed(); - } - $this->elements[] = $fs; - $this->checked = false; - } - - /** - * Adds a nested <code><dirset></code> element. - * @throws BuildException - */ - public function addDirset(DirSet $dset) { - if ($this->isReference()) { - throw $this->noChildrenAllowed(); - } - $this->elements[] = $dset; - $this->checked = false; - } - - /** - * Creates a nested <code><path></code> element. - * @throws BuildException - */ - public function createPath() { - if ($this->isReference()) { - throw $this->noChildrenAllowed(); - } - $p = new Path($this->project); - $this->elements[] = $p; - $this->checked = false; - return $p; - } - - /** - * Append the contents of the other Path instance to this. - */ - public function append(Path $other) { - if ($other === null) { - return; - } - $l = $other->listPaths(); - foreach($l as $path) { - if (!in_array($path, $this->elements, true)) { - $this->elements[] = $path; - } - } - } - - /** - * Adds the components on the given path which exist to this - * Path. Components that don't exist, aren't added. - * - * @param Path $source - Source path whose components are examined for existence. - */ - public function addExisting(Path $source) { - $list = $source->listPaths(); - foreach($list as $el) { - $f = null; - if ($this->project !== null) { - $f = $this->project->resolveFile($el); - } else { - $f = new PhingFile($el); - } - - if ($f->exists()) { - $this->setDir($f); - } else { - $this->log("dropping " . $f->__toString() . " from path as it doesn't exist", - PROJECT_MSG_VERBOSE); - } - } - } - - /** - * Returns all path elements defined by this and nested path objects. - * @return array List of path elements. - */ - public function listPaths() { - if (!$this->checked) { - // make sure we don't have a circular reference here - $stk = array(); - array_push($stk, $this); - $this->dieOnCircularReference($stk, $this->project); - } - - $result = array(); - for ($i = 0, $elSize=count($this->elements); $i < $elSize; $i++) { - $o = $this->elements[$i]; - if ($o instanceof Reference) { - $o = $o->getReferencedObject($this->project); - // we only support references to paths right now - if (!($o instanceof Path)) { - $msg = $r->getRefId() . " doesn't denote a path"; - throw new BuildException($msg); - } - } - - if (is_string($o)) { - $result[] = $o; - } elseif ($o instanceof PathElement) { - $parts = $o->getParts(); - if ($parts === null) { - throw new BuildException("You must either set location or" - . " path on <pathelement>"); - } - foreach($parts as $part) { - $result[] = $part; - } - } elseif ($o instanceof Path) { - $p = $o; - if ($p->getProject() === null) { - $p->setProject($this->getProject()); - } - $parts = $p->listPaths(); - foreach($parts as $part) { - $result[] = $part; - } - } elseif ($o instanceof DirSet) { - $dset = $o; - $ds = $dset->getDirectoryScanner($this->project); - $dirstrs = $ds->getIncludedDirectories(); - $dir = $dset->getDir($this->project); - $this->addUnlessPresent($result, $dir, $s); - - foreach($dirstrs as $dstr) { - $d = new PhingFile($dir, $dstr); - $result[] = $d->getAbsolutePath(); - } - - } elseif ($o instanceof FileList) { - $fl = $o; - $dirstrs = $fl->getFiles($this->project); - $dir = $fl->getDir($this->project); - foreach($dirstrs as $dstr) { - $d = new PhingFile($dir, $dstr); - $result[] = $d->getAbsolutePath(); - } - } - } - - return array_unique($result); - } - - - /** - * Returns a textual representation of the path, which can be used as - * CLASSPATH or PATH environment variable definition. - * @return string A textual representation of the path. - */ - public function __toString() { - - $list = $this->listPaths(); - - // empty path return empty string - if (empty($list)) { - return ""; - } - - return implode(PATH_SEPARATOR, $list); - } - - /** - * Splits a PATH (with : or ; as separators) into its parts. - * @param Project $project - * @param string $source - */ - public static function translatePath(Project $project, $source) { - $result = array(); - if ($source == null) { - return ""; - } - - $tok = new PathTokenizer($source); - $element = ""; - while ($tok->hasMoreTokens()) { - $pathElement = $tok->nextToken(); - try { - $element .= self::resolveFile($project, $pathElement); - } catch (BuildException $e) { - $this->project->log("Dropping path element " . $pathElement - . " as it is not valid relative to the project", - PROJECT_MSG_VERBOSE); - } - - for ($i = 0, $_i=strlen($element); $i < $_i; $i++) { - self::translateFileSep($element, $i); - } - $result[] = $element; - } - - return $result; - } - - /** - * Returns its argument with all file separator characters - * replaced so that they match the local OS conventions. - */ - public static function translateFile($source) { - if ($source == null) { - return ""; - } - - $result = $source; - for ($i = 0, $_i=strlen($source); $i < $_i; $i++) { - self::translateFileSep($result, $i); - } - - return $result; - } - - /** - * Translates all occurrences of / or \ to correct separator of the - * current platform and returns whether it had to do any - * replacements. - */ - protected static function translateFileSep(&$buffer, $pos) { - if ($buffer{$pos} == '/' || $buffer{$pos} == '\\') { - $buffer{$pos} = DIRECTORY_SEPARATOR; - return true; - } - return false; - } - - /** - * How many parts does this Path instance consist of. - * DEV NOTE: expensive call! list is generated, counted, and then - * discareded. - * @return int - */ - public function size() { - return count($this->listPaths()); - } - - /** - * Return a Path that holds the same elements as this instance. - */ - public function __clone() { - $p = new Path($this->project); - $p->append($this); - return $p; - } - - /** - * Overrides the version of DataType to recurse on all DataType - * child elements that may have been added. - * @throws BuildException - */ - public function dieOnCircularReference(&$stk, Project $p) { - - if ($this->checked) { - return; - } - - // elements can contain strings, FileSets, Reference, etc. - foreach($this->elements as $o) { - - if ($o instanceof Reference) { - $o = $o->getReferencedObject($p); - } - - if ($o instanceof DataType) { - if (in_array($o, $stk, true)) { - throw $this->circularReference(); - } else { - array_push($stk, $o); - $o->dieOnCircularReference($stk, $p); - array_pop($stk); - } - } - } - - $this->checked = true; - } - - /** - * Resolve a filename with Project's help - if we know one that is. - * - * <p>Assume the filename is absolute if project is null.</p> - */ - private static function resolveFile(Project $project, $relativeName) { - if ($project !== null) { - $f = $project->resolveFile($relativeName); - return $f->getAbsolutePath(); - } - return $relativeName; - } - -} - - -/** - * Helper class, holds the nested <code><pathelement></code> values. - */ -class PathElement { - - private $parts = array(); - private $outer; - - public function __construct(Path $outer) { - $this->outer = $outer; - } - - public function setDir(PhingFile $loc) { - $this->parts = array(Path::translateFile($loc->getAbsolutePath())); - } - - public function setPath($path) { - $this->parts = Path::translatePath($this->outer->getProject(), $path); - } - - public function getParts() { - return $this->parts; - } -} -?>
\ No newline at end of file diff --git a/buildscripts/phing/classes/phing/types/PatternSet.php b/buildscripts/phing/classes/phing/types/PatternSet.php deleted file mode 100644 index 2963ab9e..00000000 --- a/buildscripts/phing/classes/phing/types/PatternSet.php +++ /dev/null @@ -1,449 +0,0 @@ -<?php -/* - * $Id: PatternSet.php,v 1.8 2005/05/26 13:10:53 mrook Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -include_once 'phing/system/io/FileReader.php'; -include_once 'phing/types/DataType.php'; - -/** - * The patternset storage component. Carries all necessary data and methods - * for the patternset stuff. - * - * @author Andreas Aderhold, andi@binarycloud.com - * @version $Revision: 1.8 $ - * @package phing.types - */ -class PatternSet extends DataType { - - private $includeList = array(); - private $excludeList = array(); - private $includesFileList = array(); - private $excludesFileList = array(); - - /** - * Makes this instance in effect a reference to another PatternSet - * instance. - * You must not set another attribute or nest elements inside - * this element if you make it a reference. - */ - function setRefid(Reference $r) { - if (!empty($this->includeList) || !empty($this->excludeList)) { - throw $this->tooManyAttributes(); - } - parent::setRefid($r); - } - - - /** - * Add a name entry on the include list - * - * @returns PatternSetNameEntry Reference to object - * @throws BuildException - */ - function createInclude() { - if ($this->isReference()) { - throw $this->noChildrenAllowed(); - } - return $this->addPatternToList($this->includeList); - } - - - /** - * Add a name entry on the include files list - * - * @returns PatternSetNameEntry Reference to object - * @throws BuildException - */ - function createIncludesFile() { - if ($this->isReference()) { - throw $this->noChildrenAllowed(); - } - return $this->addPatternToList($this->includesFileList); - } - - /** - * Add a name entry on the exclude list - * - * @returns PatternSetNameEntry Reference to object - * @throws BuildException - */ - function createExclude() { - if ($this->isReference()) { - throw $this->noChildrenAllowed(); - } - return $this->addPatternToList($this->excludeList); - } - - /** - * add a name entry on the exclude files list - * - * @returns PatternSetNameEntry Reference to object - * @throws BuildException - */ - - function createExcludesFile() { - if ($this->isReference()) { - throw $this->noChildrenAllowed(); - return; - } - return $this->addPatternToList($this->excludesFileList); - } - - - /** - * Sets the set of include patterns. Patterns may be separated by a comma - * or a space. - * - * @param string the string containing the include patterns - * @returns void - * @throws BuildException - */ - function setIncludes($includes) { - if ($this->isReference()) { - throw $this->tooManyAttributes(); - } - if ($includes !== null && strlen($includes) > 0) { - $tok = strtok($includes, ", "); - while ($tok !== false) { - $o = $this->createInclude(); - $o->setName($tok); - $tok = strtok(", "); - } - } - } - - - /** - * Sets the set of exclude patterns. Patterns may be separated by a comma - * or a space. - * - * @param string the string containing the exclude patterns - * @returns void - * @throws BuildException - */ - - function setExcludes($excludes) { - if ($this->isReference()) { - throw $this->tooManyAttributes(); - } - if ($excludes !== null && strlen($excludes) > 0) { - $tok = strtok($excludes, ", "); - while ($tok !== false) { - $o = $this->createExclude(); - $o->setName($tok); - $tok = strtok(", "); - } - } - } - - /** - * add a name entry to the given list - * - * @param array List onto which the nameentry should be added - * @returns PatternSetNameEntry Reference to the created PsetNameEntry instance - */ - private function addPatternToList(&$list) { - $num = array_push($list, new PatternSetNameEntry()); - return $list[$num-1]; - } - - /** - * Sets the name of the file containing the includes patterns. - * - * @param includesFile The file to fetch the include patterns from. - */ - function setIncludesFile($includesFile) { - if ($this->isReference()) { - throw $this->tooManyAttributes(); - } - if ($includesFile instanceof File) { - $includesFile = $includesFile->getPath(); - } - $o = $this->createIncludesFile(); - $o->setName($includesFile); - } - - /** - * Sets the name of the file containing the excludes patterns. - * - * @param excludesFile The file to fetch the exclude patterns from. - */ - function setExcludesFile($excludesFile) { - if ($this->isReference()) { - throw $this->tooManyAttributes(); - } - if ($excludesFile instanceof File) { - $excludesFile = $excludesFile->getPath(); - } - $o = $this->createExcludesFile(); - $o->setName($excludesFile); - } - - - /** - * Reads path matching patterns from a file and adds them to the - * includes or excludes list - */ - private function readPatterns(PhingFile $patternfile, &$patternlist, Project $p) { - $patternReader = null; - try { - // Get a FileReader - $patternReader = new BufferedReader(new FileReader($patternfile)); - - // Create one NameEntry in the appropriate pattern list for each - // line in the file. - $line = $patternReader->readLine(); - while ($line !== null) { - if (!empty($line)) { - $line = $p->replaceProperties($line); - $this->addPatternToList($patternlist)->setName($line); - } - $line = $patternReader->readLine(); - } - - } catch (IOException $ioe) { - $msg = "An error occured while reading from pattern file: " . $patternfile->__toString(); - if($patternReader) $patternReader->close(); - throw new BuildException($msg, $ioe); - } - - $patternReader->close(); - } - - - /** Adds the patterns of the other instance to this set. */ - function append($other, $p) { - if ($this->isReference()) { - throw new BuildException("Cannot append to a reference"); - } - - $incl = $other->getIncludePatterns($p); - if ($incl !== null) { - foreach($incl as $incl_name) { - $o = $this->createInclude(); - $o->setName($incl_name); - } - } - - $excl = $other->getExcludePatterns($p); - if ($excl !== null) { - foreach($excl as $excl_name) { - $o = $this->createExclude(); - $o->setName($excl_name); - } - } - } - - /** Returns the filtered include patterns. */ - function getIncludePatterns(Project $p) { - if ($this->isReference()) { - $o = $this->getRef($p); - return $o->getIncludePatterns($p); - } else { - $this->readFiles($p); - return $this->makeArray($this->includeList, $p); - } - } - - /** Returns the filtered exclude patterns. */ - function getExcludePatterns(Project $p) { - if ($this->isReference()) { - $o = $this->getRef($p); - return $o->getExcludePatterns($p); - } else { - $this->readFiles($p); - return $this->makeArray($this->excludeList, $p); - } - } - - /** helper for FileSet. */ - function hasPatterns() { - return (boolean) count($this->includesFileList) > 0 || count($this->excludesFileList) > 0 - || count($this->includeList) > 0 || count($this->excludeList) > 0; - } - - /** - * Performs the check for circular references and returns the - * referenced PatternSet. - */ - function getRef(Project $p) { - if (!$this->checked) { - $stk = array(); - array_push($stk, $this); - $this->dieOnCircularReference($stk, $p); - } - $o = $this->ref->getReferencedObject($p); - if (!($o instanceof PatternSet)) { - $msg = $this->ref->getRefId()." doesn't denote a patternset"; - throw new BuildException($msg); - } else { - return $o; - } - } - - /** Convert a array of PatternSetNameEntry elements into an array of Strings. */ - private function makeArray(&$list, Project $p) { - - if (count($list) === 0) { - return null; - } - - $tmpNames = array(); - foreach($list as $ne) { - $pattern = (string) $ne->evalName($p); - if ($pattern !== null && strlen($pattern) > 0) { - array_push($tmpNames, $pattern); - } - } - return $tmpNames; - } - - /** Read includesfile or excludesfile if not already done so. */ - private function readFiles(Project $p) { - if (!empty($this->includesFileList)) { - foreach($this->includesFileList as $ne) { - $fileName = (string) $ne->evalName($p); - if ($fileName !== null) { - $inclFile = $p->resolveFile($fileName); - if (!$inclFile->exists()) { - throw new BuildException("Includesfile ".$inclFile->getAbsolutePath()." not found."); - } - $this->readPatterns($inclFile, $this->includeList, $p); - } - } - $this->includesFileList = array(); - } - - if (!empty($this->excludesFileList)) { - foreach($this->excludesFileList as $ne) { - $fileName = (string) $ne->evalName($p); - if ($fileName !== null) { - $exclFile = $p->resolveFile($fileName); - if (!$exclFile->exists()) { - throw new BuildException("Excludesfile ".$exclFile->getAbsolutePath()." not found."); - return; - } - $this->readPatterns($exclFile, $this->excludeList, $p); - } - } - $this->excludesFileList = array(); - } - } - - - function toString() { - - // We can't compile includeList into array because, toString() does - // not know about project: - // - // $includes = $this->makeArray($this->includeList, $this->project); - // $excludes = $this->makeArray($this->excludeList, $this->project); - - if (empty($this->includeList)) { - $includes = "empty"; - } else { - $includes = ""; - foreach($this->includeList as $ne) { - $includes .= $ne->toString() . ","; - } - $includes = rtrim($includes, ","); - } - - if (empty($this->excludeList)) { - $excludes = "empty"; - } else { - $excludes = ""; - foreach($this->excludeList as $ne) { - $excludes .= $ne->toString() . ","; - } - $excludes = rtrim($excludes, ","); - } - - return "patternSet{ includes: $includes excludes: $excludes }"; - } -} - - -/* - * Note, this class here should become a nested class to - * PatternSet (PatternSet:NameEntry) as it is only needed - * internally. - * This is not possible with php 4.x right now so we place - * this class (against good style) in this file. - */ - -class PatternSetNameEntry { - - private $name = null; - private $ifCond = null; - private $unlessCond = null; - - function setName($name) { - $this->name = (string) $name; - } - - - function setIf($cond) { - $this->ifCond = (string) $cond; - } - - - function setUnless($cond) { - $this->unlessCond = (string) $cond; - } - - - function getName() { - return $this->name; - } - - - function evalName($project) { - return $this->valid($project) ? $this->name : null; - } - - - function valid($project) { - if ($this->ifCond !== null && $project->getProperty($this->ifCond) === null) { - return false; - } else if ($this->unlessCond !== null && $project->getProperty($this->unlessCond) !== null) { - return false; - } - return true; - } - - - function toString() { - $buf = $this->name; - if (($this->ifCond !== null) || ($this->unlessCond !== null)) { - $buf .= ":"; - $connector = ""; - - if ($this->ifCond !== null) { - $buf .= "if->{$this->ifCond}"; - $connector = ";"; - } - if ($this->unlessCond !== null) { - $buf .= "$connector unless->{$this->unlessCond}"; - } - } - return $buf; - } -} diff --git a/buildscripts/phing/classes/phing/types/PhingFilterReader.php b/buildscripts/phing/classes/phing/types/PhingFilterReader.php deleted file mode 100644 index eb45f894..00000000 --- a/buildscripts/phing/classes/phing/types/PhingFilterReader.php +++ /dev/null @@ -1,136 +0,0 @@ -<?php -/* - * $Id: PhingFilterReader.php,v 1.9 2005/10/05 20:23:22 hlellelid Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. -*/ - -include_once 'phing/types/DataType.php'; -include_once 'phing/types/Parameter.php'; - -/* - * A PhingFilterReader is a wrapper class that encloses the className - * and configuration of a Configurable FilterReader. - * - * @author Yannick Lecaillez <yl@seasonfive.com> - * @version $Revision: 1.9 $ - * @see FilterReader - * @package phing.types -*/ -class PhingFilterReader extends DataType { - - private $className; - private $parameters = array(); - private $classPath; - - function setClassName($className) { - $this->className = $className; - } - - function getClassName() { - return $this->className; - } - - /** - * Set the classpath to load the FilterReader through (attribute). - * @param Path $classpath - */ - function setClasspath(Path $classpath) { - if ( $this->isReference() ) { - throw $this->tooManyAttributes(); - } - if ( $this->classPath === null ) { - $this->classPath = $classpath; - } else { - $this->classPath->append($classpath); - } - } - - /* - * Set the classpath to load the FilterReader through (nested element). - */ - function createClasspath() { - if ( $this->isReference() ) { - throw $this->noChildrenAllowed(); - } - if ( $this->classPath === null ) { - $this->classPath = new Path($this->project); - } - return $this->classPath->createPath(); - } - - function getClasspath() { - return $this->classPath; - } - - function setClasspathRef(Reference $r) { - if ( $this->isReference() ) { - throw $this->tooManyAttributes(); - } - $o = $this->createClasspath(); - $o->setRefid($r); - } - - function addParam(Parameter $param) { - $this->parameters[] = $param; - } - - function createParam() { - $num = array_push($this->parameters, new Parameter()); - return $this->parameters[$num-1]; - } - - function getParams() { - // We return a COPY - $ret = array(); - for($i=0,$size=count($this->parameters); $i < $size; $i++) { - $ret[] = clone $this->parameters[$i]; - } - return $ret; - } - - /* - * Makes this instance in effect a reference to another PhingFilterReader - * instance. - * - * <p>You must not set another attribute or nest elements inside - * this element if you make it a reference.</p> - * - * @param Reference $r the reference to which this instance is associated - * @exception BuildException if this instance already has been configured. - */ - function setRefid(Reference $r) { - if ( (count($this->parameters) !== 0) || ($this->className !== null) ) { - throw $this->tooManyAttributes(); - } - $o = $r->getReferencedObject($this->getProject()); - if ( $o instanceof PhingFilterReader ) { - $this->setClassName($o->getClassName()); - $this->setClasspath($o->getClassPath()); - foreach($o->getParams() as $p) { - $this->addParam($p); - } - } else { - $msg = $r->getRefId()." doesn\'t refer to a PhingFilterReader"; - throw new BuildException($msg); - } - - parent::setRefid($r); - } -} - -?> diff --git a/buildscripts/phing/classes/phing/types/Reference.php b/buildscripts/phing/classes/phing/types/Reference.php deleted file mode 100644 index c226917d..00000000 --- a/buildscripts/phing/classes/phing/types/Reference.php +++ /dev/null @@ -1,56 +0,0 @@ -<?php -/* - * $Id: Reference.php,v 1.4 2003/12/24 12:38:42 hlellelid Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -/** Class to hold a reference to another object in the project. - * @package phing.types - */ -class Reference { - - protected $refid; - - function __construct($id = null) { - if ($id !== null) { - $this->setRefId($id); - } - } - - function setRefId($id) { - $this->refid = (string) $id; - } - - function getRefId() { - return $this->refid; - } - - /** returns reference to object in references container of project */ - function getReferencedObject($project) { - if ($this->refid === null) { - throw new BuildException("No reference specified"); - } - $refs = $project->getReferences(); - $o = @$refs[$this->refid]; - if (!is_object($o)) { - throw new BuildException("Reference {$this->refid} not found."); - } - return $o; - } -} -?> diff --git a/buildscripts/phing/classes/phing/types/RegularExpression.php b/buildscripts/phing/classes/phing/types/RegularExpression.php deleted file mode 100644 index 67850c23..00000000 --- a/buildscripts/phing/classes/phing/types/RegularExpression.php +++ /dev/null @@ -1,105 +0,0 @@ -<?php -/* - * $Id: RegularExpression.php,v 1.6 2003/12/24 12:38:42 hlellelid Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. -*/ - -include_once 'phing/types/DataType.php'; -include_once 'phing/Project.php'; -include_once 'phing/util/regexp/Regexp.php'; - -/* - * A regular expression datatype. Keeps an instance of the - * compiled expression for speed purposes. This compiled - * expression is lazily evaluated (it is compiled the first - * time it is needed). The syntax is the dependent on which - * regular expression type you are using. - * - * @author <a href="mailto:yl@seasonfive.com">Yannick Lecaillez</a> - * @version $Revision: 1.6 $ $Date: 2003/12/24 12:38:42 $ - * @access public - * @see phing.util.regex.RegexMatcher - * @package phing.types -*/ -class RegularExpression extends DataType { - - private $regexp = null; - private $ignoreCase = false; - - function __construct() { - $this->regexp = new Regexp(); - } - - function setPattern($pattern) { - $this->regexp->setPattern($pattern); - } - - function setReplace($replace) { - $this->regexp->setReplace($replace); - } - - function getPattern($p) { - if ( $this->isReference() ) { - $ref = $this->getRef($p); - return $ref->getPattern($p); - } - return $this->regexp->getPattern(); - } - - function getReplace($p) { - if ( $this->isReference() ) { - $ref = $this->getRef($p); - return $ref->getReplace($p); - } - - return $this->regexp->getReplace(); - } - - function setIgnoreCase($bit) { - $this->regexp->setIgnoreCase($bit); - } - - function getIgnoreCase() { - return $this->regexp->getIgnoreCase(); - } - - function getRegexp(Project $p) { - if ( $this->isReference() ) { - $ref = $this->getRef($p); - return $ref->getRegexp($p); - } - return $this->regexp; - } - - function getRef(Project $p) { - if ( !$this->checked ) { - $stk = array(); - array_push($stk, $this); - $this->dieOnCircularReference($stk, $p); - } - - $o = $this->ref->getReferencedObject($p); - if ( !($o instanceof RegularExpression) ) { - throw new BuildException($this->ref->getRefId()." doesn't denote a RegularExpression"); - } else { - return $o; - } - } -} - -?> diff --git a/buildscripts/phing/classes/phing/types/TokenReader.php b/buildscripts/phing/classes/phing/types/TokenReader.php deleted file mode 100644 index acd7d616..00000000 --- a/buildscripts/phing/classes/phing/types/TokenReader.php +++ /dev/null @@ -1,66 +0,0 @@ -<?php -/* - * $Id: TokenReader.php,v 1.5 2003/12/24 12:38:42 hlellelid Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. -*/ - -// include_once 'phing/system/io/Reader.php'; // really this is unrelated to Reader -include_once 'phing/system/io/IOException.php'; -include_once 'phing/filters/ReplaceTokens.php'; // For class Token - -/** - * Abstract class for TokenReaders. - * - * @author Manuel Holtgewe - * @version $Revision: 1.5 $ - * @package phing.filters.util - */ -abstract class TokenReader { - - /** - * Reference to the Project the TokenReader is used in. - * @var Project - */ - protected $project; - - /** - * Constructor - * @param object Reference to the project the TokenReader is used in. - */ - function __construct(Project $project) { - $this->project = $project; - } - - /** - * Utility function for logging - */ - function log($level, $msg) { - $this->project->log($level, $msg); - } - - /** - * Reads the next token from the Reader - * - * @throws IOException - On error - * @return string - */ - abstract public function readToken(); - -} - -?> diff --git a/buildscripts/phing/classes/phing/types/TokenSource.php b/buildscripts/phing/classes/phing/types/TokenSource.php deleted file mode 100644 index c073ece0..00000000 --- a/buildscripts/phing/classes/phing/types/TokenSource.php +++ /dev/null @@ -1,157 +0,0 @@ -<?php -/* - * $Id: TokenSource.php,v 1.7 2004/03/18 20:44:26 hlellelid Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. -*/ - -require_once 'phing/types/DataType.php'; -include_once 'phing/util/StringHelper.php'; - -/** - * A parameter is composed of a name, type and value. - * - * Example of usage: - * - * <replacetokens> - * <tokensource classname="phing.filters.util.IniFileTokenReader"> - * <!-- all params for the TokenReader here --> - * <param name="file" value="tokens.ini" /> - * </tokensource> - * </replacetokens> - * - * or: - * - * <filterreader classname="phing.filters.ReplaceTokens"> - * <param type="tokensource> - * <param name="classname" value="phing.filters.util.IniFileTokenReader" /> - * <param name="file" value="tokens.ini" /> - * </param> - * </filterreader> - * - * @author <a href="mailto:yl@seasonfive.com">Yannick Lecaillez</a> - * @package phing.types - */ -class TokenSource extends DataType { - - /** - * String to hold the path to the TokenReader - * @var string - */ - protected $classname = null; - - /** - * Array holding parameters for the wrapped TokenReader. - * @var array - */ - protected $parameters = array(); - - /** - * Reference to the TokenReader used by this TokenSource - * @var TokenReader - */ - protected $reader; - - /** - * Array with key/value pairs of tokens - */ - protected $tokens = array(); - - /** - * This method is called to load the sources from the reader - * into the buffer of the source. - */ - function load() { - // Create new Reader - if ($this->classname === null) { - throw new BuildException("No Classname given to TokenSource."); - } - - $classname = Phing::import($this->classname); - $this->reader = new $classname($this->project); - - // Configure Reader - $this->configureTokenReader($this->reader); - - // Load Tokens - try { - while ($token = $this->reader->readToken()) { - $this->tokens[] = $token; - } - } catch (BuildException $e) { - $this->log("Error reading TokenSource: " . $e->getMessage(), PROJECT_MSG_WARN); - } catch (IOException $e) { - $this->log("Error reading TokenSource: " . $e->getMessage(), PROJECT_MSG_WARN); - } - } - - /** - * This function uses the wrapper to read the tokens and then - * returns them. - * - * @access public - */ - function getTokens() { - if ($this->tokens === null) - $this->Load(); - - return $this->tokens; - } - - /** - * Configures a TokenReader with the parameters passed to the - * TokenSource. - * @param TokenReader $reader - */ - private function configureTokenReader(TokenReader $reader) { - $count = count($this->parameters); - for ($i = 0; $i < $count; $i++) { - $method_name = "Set" . $this->parameters[$i]->getName(); - $value = $this->parameters[$i]->getValue(); - $reader->$method_name($value); - } - } - - /** - * Set the classname (dot-path) to use for handling token replacement. - * @param string $c - */ - function setClassname($c) { - $this->classname = $c; - } - - /** - * Returns the qualified classname (dot-path) to use for handling token replacement. - * @return string - */ - function getClassname() { - return $this->classname; - } - - /** - * Create nested <param> tag. - * Uses standard name/value Parameter class. - * @return Parameter - */ - function createParam() { - $num = array_push($this->parameters, new Parameter()); - return $this->parameters[$num-1]; - } -} - - -?> diff --git a/buildscripts/phing/classes/phing/types/defaults.properties b/buildscripts/phing/classes/phing/types/defaults.properties deleted file mode 100644 index a2d86350..00000000 --- a/buildscripts/phing/classes/phing/types/defaults.properties +++ /dev/null @@ -1,13 +0,0 @@ -# phing default types -commandline=phing.types.Commandline -fileset=phing.types.FileSet -dirset=phing.types.DirSet -filelist=phing.types.FileList -patternset=phing.types.PatternSet -mapper=phing.types.Mapper -filterchain=phing.types.FilterChain -filterreader=phing.types.PhingFilterReader -regexp=phing.types.RegularExpression -param=phing.types.Parameter -path=phing.types.Path -selector=phing.types.selectors.SelectSelector
\ No newline at end of file diff --git a/buildscripts/phing/classes/phing/types/selectors/AndSelector.php b/buildscripts/phing/classes/phing/types/selectors/AndSelector.php deleted file mode 100644 index 3801091f..00000000 --- a/buildscripts/phing/classes/phing/types/selectors/AndSelector.php +++ /dev/null @@ -1,67 +0,0 @@ -<?php -/* - * $Id: AndSelector.php,v 1.9 2005/05/26 13:10:53 mrook Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -require_once 'phing/types/selectors/BaseSelectorContainer.php'; - -/** - * This selector has a collection of other selectors, all of which have to - * select a file in order for this selector to select it. - * - * @author Hans Lellelid, hans@xmpl.org (Phing) - * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a> (Ant) - * @package phing.types.selectors - */ -class AndSelector extends BaseSelectorContainer { - - public function toString() { - $buf = ""; - if ($this->hasSelectors()) { - $buf .= "{andselect: "; - $buf .= parent::toString(); - $buf .= "}"; - } - return $buf; - } - - /** - * Returns true (the file is selected) only if all other selectors - * agree that the file should be selected. - * - * @param basedir the base directory the scan is being done from - * @param filename the name of the file to check - * @param file a PhingFile object for the filename that the selector - * can use - * @return whether the file should be selected or not - */ - public function isSelected(PhingFile $basedir, $filename, PhingFile $file) { - $this->validate(); - $selectors = $this->selectorElements(); - for($i=0,$size=count($selectors); $i < $size; $i++) { - $result = $selectors[$i]->isSelected($basedir, $filename, $file); - if (!$result) { - return false; - } - } - return true; - } - -} - diff --git a/buildscripts/phing/classes/phing/types/selectors/BaseExtendSelector.php b/buildscripts/phing/classes/phing/types/selectors/BaseExtendSelector.php deleted file mode 100644 index 5acc54dd..00000000 --- a/buildscripts/phing/classes/phing/types/selectors/BaseExtendSelector.php +++ /dev/null @@ -1,62 +0,0 @@ -<?php - -/* - * $Id: BaseExtendSelector.php,v 1.5 2004/02/16 05:28:40 hlellelid Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -require_once 'phing/types/selectors/ExtendFileSelector.php'; -require_once 'phing/types/selectors/BaseSelector.php'; -include_once 'phing/types/Parameter.php'; - -/** - * Convenience base class for all selectors accessed through ExtendSelector. - * It provides support for gathering the parameters together as well as for - * assigning an error message and throwing a build exception if an error is - * detected. - * - * @author Hans Lellelid, hans@xmpl.org (Phing) - * @author Bruce Atherton, bruce@callenish.com (Ant) - * @package phing.types.selectors - */ -abstract class BaseExtendSelector extends BaseSelector implements ExtendFileSelector { - - /** The passed in parameter array. */ - protected $parameters = null; - - /** - * Set all the Parameters for this custom selector, collected by - * the ExtendSelector class. - * - * @param parameters the complete set of parameters for this selector - */ - public function setParameters($parameters) { - $this->parameters = $parameters; - } - - /** - * Allows access to the parameters gathered and set within the - * <custom> tag. - * - * @return the set of parameters defined for this selector - */ - protected function getParameters() { - return $this->parameters; - } -} - diff --git a/buildscripts/phing/classes/phing/types/selectors/BaseSelector.php b/buildscripts/phing/classes/phing/types/selectors/BaseSelector.php deleted file mode 100644 index e229fc24..00000000 --- a/buildscripts/phing/classes/phing/types/selectors/BaseSelector.php +++ /dev/null @@ -1,84 +0,0 @@ -<?php -/* - * $Id: BaseSelector.php,v 1.4 2004/02/16 04:56:24 hlellelid Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -require_once 'phing/types/selectors/FileSelector.php'; - -/** - * A convenience base class that you can subclass Selectors from. It - * provides some helpful common behaviour. Note that there is no need - * for Selectors to inherit from this class, it is only necessary that - * they implement FileSelector. - * - * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a> - * @package phing.types.selectors - */ -abstract class BaseSelector extends DataType implements FileSelector { - - private $errmsg = null; - - /** - * Allows all selectors to indicate a setup error. Note that only - * the first error message is recorded. - * - * @param msg The error message any BuildException should throw. - */ - public function setError($msg) { - if ($this->errmsg === null) { - $this->errmsg = $msg; - } - } - - /** - * Returns any error messages that have been set. - * - * @return the error condition - */ - public function getError() { - return $this->errmsg; - } - - - /** - * <p>Subclasses can override this method to provide checking of their - * state. So long as they call validate() from isSelected(), this will - * be called automatically (unless they override validate()).</p> - * <p>Implementations should check for incorrect settings and call - * setError() as necessary.</p> - */ - public function verifySettings() { - } - - /** - * Subclasses can use this to throw the requisite exception - * in isSelected() in the case of an error condition. - */ - public function validate() { - if ($this->getError() === null) { - $this->verifySettings(); - } - if ($this->getError() !== null) { - throw new BuildException($this->errmsg); - } - } - -} - - diff --git a/buildscripts/phing/classes/phing/types/selectors/BaseSelectorContainer.php b/buildscripts/phing/classes/phing/types/selectors/BaseSelectorContainer.php deleted file mode 100644 index 19b84b00..00000000 --- a/buildscripts/phing/classes/phing/types/selectors/BaseSelectorContainer.php +++ /dev/null @@ -1,270 +0,0 @@ -<?php - -/* - * $Id: BaseSelectorContainer.php,v 1.9 2004/02/16 04:56:24 hlellelid Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -require_once 'phing/types/selectors/SelectorContainer.php'; -require_once 'phing/types/selectors/BaseSelector.php'; - -/** - * This is the base class for selectors that can contain other selectors. - * - * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a> (Ant) - * @package phing.types.selectors - */ -abstract class BaseSelectorContainer extends BaseSelector implements SelectorContainer { - - private $selectorsList = array(); - - /** - * Indicates whether there are any selectors here. - */ - public function hasSelectors() { - return !(empty($this->selectorsList)); - } - - /** - * Gives the count of the number of selectors in this container - */ - public function selectorCount() { - return count($this->selectorsList); - } - - /** - * Returns a copy of the selectors as an array. - */ - public function getSelectors(Project $p) { - $result = array(); - for($i=0,$size=count($this->selectorsList); $i < $size; $i++) { - $result[] = clone $this->selectorsList[$i]; - } - return $result; - } - - /** - * Returns an array for accessing the set of selectors (not a copy). - */ - public function selectorElements() { - return $this->selectorsList; - } - - /** - * Convert the Selectors within this container to a string. This will - * just be a helper class for the subclasses that put their own name - * around the contents listed here. - * - * @return comma separated list of Selectors contained in this one - */ - public function toString() { - $buf = ""; - $arr = $this->selectorElements(); - for($i=0,$size=count($arr); $i < $size; $i++) { - $buf .= $arr[$i]->toString() . (isset($arr[$i+1]) ? ', ' : ''); - } - return $buf; - } - - /** - * Add a new selector into this container. - * - * @param selector the new selector to add - * @return the selector that was added - */ - public function appendSelector(FileSelector $selector) { - $this->selectorsList[] = $selector; - } - - /** - * <p>This implementation validates the container by calling - * verifySettings() and then validates each contained selector - * provided that the selector implements the validate interface. - * </p> - * <p>Ordinarily, this will validate all the elements of a selector - * container even if the isSelected() method of some elements is - * never called. This has two effects:</p> - * <ul> - * <li>Validation will often occur twice. - * <li>Since it is not required that selectors derive from - * BaseSelector, there could be selectors in the container whose - * error conditions are not detected if their isSelected() call - * is never made. - * </ul> - */ - public function validate() { - $this->verifySettings(); - $errmsg = $this->getError(); - if ($errmsg !== null) { - throw new BuildException($errmsg); - } - foreach($this->selectorsList as $o) { - if ($o instanceof BaseSelector) { - $o->validate(); - } - } - } - - /* Methods below all add specific selectors */ - - /** - * add a "Select" selector entry on the selector list - */ - public function createSelector() { - $o = new SelectSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add an "And" selector entry on the selector list - */ - public function createAnd() { - $o = new AndSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add an "Or" selector entry on the selector list - */ - public function createOr() { - $o = new OrSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add a "Not" selector entry on the selector list - */ - public function createNot() { - $o = new NotSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add a "None" selector entry on the selector list - */ - public function createNone() { - $o = new NoneSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add a majority selector entry on the selector list - */ - public function createMajority() { - $o = new MajoritySelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add a selector date entry on the selector list - */ - public function createDate() { - $o = new DateSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add a selector size entry on the selector list - */ - public function createSize() { - $o = new SizeSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add a selector filename entry on the selector list - */ - public function createFilename() { - $o = new FilenameSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add an extended selector entry on the selector list - */ - public function createCustom() { - $o = new ExtendSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add a contains selector entry on the selector list - */ - public function createContains() { - $o = new ContainsSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add a contains selector entry on the selector list - */ - public function createContainsRegexp() { - $o = new ContainsRegexpSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add a present selector entry on the selector list - */ - public function createPresent() { - $o = new PresentSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add a depth selector entry on the selector list - */ - public function createDepth() { - $o = new DepthSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add a depends selector entry on the selector list - */ - public function createDepend() { - $o = new DependSelector(); - $this->appendSelector($o); - return $o; - } - - /** - * add a type selector entry on the selector list - */ - public function createType() { - $o = new TypeSelector(); - $this->appendSelector($o); - return $o; - } - -} - diff --git a/buildscripts/phing/classes/phing/types/selectors/ContainsRegexpSelector.php b/buildscripts/phing/classes/phing/types/selectors/ContainsRegexpSelector.php deleted file mode 100644 index 39afd2fa..00000000 --- a/buildscripts/phing/classes/phing/types/selectors/ContainsRegexpSelector.php +++ /dev/null @@ -1,164 +0,0 @@ -<?php - -/* - * $Id: ContainsRegexpSelector.php,v 1.3 2005/05/26 13:10:53 mrook Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -require_once 'phing/types/selectors/BaseExtendSelector.php'; -include_once 'phing/types/RegularExpression.php'; - -/** - * Selector that filters files based on whether they contain a - * particular string using regexp. - * - * @author Hans Lellelid <hans@xmpl.org> (Phing) - * @author Bruce Atherton <bruce@callenish.com> (Ant) - * @version $Revision: 1.3 $ - * @package phing.types.selectors - */ -class ContainsRegexpSelector extends BaseExtendSelector { - - /** @var string The expression set from XML. */ - private $userProvidedExpression; - - /** @var Regexp */ - private $myExpression; - - private $casesensitive = true; - - /** @var RegularExpression */ - private $myRegExp; - - const EXPRESSION_KEY = "expression"; - - const CASE_KEY = "casesensitive"; - - public function toString() { - $buf = "{containsregexpselector expression: "; - $buf .= $this->userProvidedExpression; - $buf .= " casesensitive: "; - if ($this->casesensitive) { - $buf .= "true"; - } else { - $buf .= "false"; - } - $buf .= "}"; - return $buf; - } - - /** - * The expression to match on within a file. - * - * @param string $exp the string that a file must contain to be selected. - */ - public function setExpression($exp) { - $this->userProvidedExpression = $exp; - } - - /** - * Whether to ignore case in the regex match. - * - * @param boolean $casesensitive whether to pay attention to case sensitivity - */ - public function setCasesensitive($casesensitive) { - $this->casesensitive = $casesensitive; - } - - /** - * When using this as a custom selector, this method will be called. - * It translates each parameter into the appropriate setXXX() call. - * - * @param array $parameters the complete set of parameters for this selector - */ - public function setParameters($parameters) { - parent::setParameters($parameters); - if ($parameters !== null) { - for ($i=0,$size=count($parameters); $i < $size; $i++) { - $paramname = $parameters[$i]->getName(); - switch(strtolower($paramname)) { - case self::EXPRESSION_KEY: - $this->setExpression($parameters[$i]->getValue()); - break; - case self::CASE_KEY: - $this->setCasesensitive($parameters[$i]->getValue()); - break; - default: - $this->setError("Invalid parameter " . $paramname); - } - } // for each param - } // if params - } - - /** - * Checks to make sure all settings are kosher. In this case, it - * means that the pattern attribute has been set. - * - */ - public function verifySettings() { - if ($this->userProvidedExpression === null) { - $this->setError("The expression attribute is required"); - } - } - - /** - * The heart of the matter. This is where the selector gets to decide - * on the inclusion of a file in a particular fileset. - * - * @param basedir the base directory the scan is being done from - * @param filename is the name of the file to check - * @param file a PhingFile object the selector can use - * @return whether the file should be selected or not - */ - public function isSelected(PhingFile $basedir, $filename, PhingFile $file) { - - $this->validate(); - - if ($file->isDirectory()) { - return true; - } - - if ($this->myRegExp === null) { - $this->myRegExp = new RegularExpression(); - $this->myRegExp->setPattern($this->userProvidedExpression); - if (!$this->casesensitive) { - $this->myRegExp->setIgnoreCase(true); - } - $this->myExpression = $this->myRegExp->getRegexp($this->getProject()); - } - - $in = null; - try { - $in = new BufferedReader(new FileReader($file)); - $teststr = $in->readLine(); - while ($teststr !== null) { - if ($this->myExpression->matches($teststr)) { - return true; - } - $teststr = $in->readLine(); - } - return false; - } catch (IOException $ioe) { - if ($in) $in->close(); - throw new BuildException("Could not read file " . $filename); - } - $in->close(); - } - -} - diff --git a/buildscripts/phing/classes/phing/types/selectors/ContainsSelector.php b/buildscripts/phing/classes/phing/types/selectors/ContainsSelector.php deleted file mode 100644 index d00ce995..00000000 --- a/buildscripts/phing/classes/phing/types/selectors/ContainsSelector.php +++ /dev/null @@ -1,151 +0,0 @@ -<?php - -/* - * $Id: ContainsSelector.php,v 1.9 2005/05/26 13:10:53 mrook Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -include_once 'phing/types/selectors/BaseExtendSelector.php'; - -/** - * Selector that filters files based on whether they contain a - * particular string. - * - * @author Hans Lellelid <hans@xmpl.org> (Phing) - * @author Bruce Atherton <bruce@callenish.com> (Ant) - * @package phing.types.selectors - */ -class ContainsSelector extends BaseExtendSelector { - - private $contains = null; - private $casesensitive = true; - const CONTAINS_KEY = "text"; - const CASE_KEY = "casesensitive"; - - public function toString() { - $buf = "{containsselector text: "; - $buf .= $this->contains; - $buf .= " casesensitive: "; - if ($this->casesensitive) { - $buf .= "true"; - } else { - $buf .= "false"; - } - $buf .= "}"; - return $buf; - } - - /** - * The string to search for within a file. - * - * @param string $contains the string that a file must contain to be selected. - */ - public function setText($contains) { - $this->contains = $contains; - } - - /** - * Whether to ignore case in the string being searched. - * - * @param boolean $casesensitive whether to pay attention to case sensitivity - */ - public function setCasesensitive($casesensitive) { - $this->casesensitive = $casesensitive; - } - - /** - * When using this as a custom selector, this method will be called. - * It translates each parameter into the appropriate setXXX() call. - * - * @param array $parameters the complete set of parameters for this selector - */ - public function setParameters($parameters) { - parent::setParameters($parameters); - if ($parameters !== null) { - for ($i=0,$size=count($parameters); $i < $size; $i++) { - $paramname = $parameters[$i]->getName(); - switch(strtolower($paramname)) { - case self::CONTAINS_KEY: - $this->setText($parameters[$i]->getValue()); - break; - case self::CASE_KEY: - $this->setCasesensitive($parameters[$i]->getValue()); - break; - default: - $this->setError("Invalid parameter " . $paramname); - } - } // for each param - } // if params - } - - /** - * Checks to make sure all settings are kosher. In this case, it - * means that the pattern attribute has been set. - * - */ - public function verifySettings() { - if ($this->contains === null) { - $this->setError("The text attribute is required"); - } - } - - /** - * The heart of the matter. This is where the selector gets to decide - * on the inclusion of a file in a particular fileset. - * - * @param basedir the base directory the scan is being done from - * @param filename is the name of the file to check - * @param file a PhingFile object the selector can use - * @return whether the file should be selected or not - */ - public function isSelected(PhingFile $basedir, $filename, PhingFile $file) { - - $this->validate(); - - if ($file->isDirectory()) { - return true; - } - - $userstr = $this->contains; - if (!$this->casesensitive) { - $userstr = strtolower($this->contains); - } - - $in = null; - try { - $in = new BufferedReader(new FileReader($file)); - $teststr = $in->readLine(); - while ($teststr !== null) { - if (!$this->casesensitive) { - $teststr = strtolower($teststr); - } - if (strpos($teststr, $userstr) !== false) { - return true; - } - $teststr = $in->readLine(); - } - return false; - } catch (IOException $ioe) { - if ($in) $in->close(); - throw new BuildException("Could not read file " . $filename); - } - $in->close(); - } - -} - diff --git a/buildscripts/phing/classes/phing/types/selectors/DateSelector.php b/buildscripts/phing/classes/phing/types/selectors/DateSelector.php deleted file mode 100644 index 96e5c3ba..00000000 --- a/buildscripts/phing/classes/phing/types/selectors/DateSelector.php +++ /dev/null @@ -1,214 +0,0 @@ -<?php - -/* - * $Id: DateSelector.php,v 1.10 2005/05/26 13:10:53 mrook Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -require_once 'phing/types/selectors/BaseExtendSelector.php'; - -/** - * Selector that chooses files based on their last modified date. Ant uses - * millisecond precision (thanks to Java); PHP is forced to use only seconds - * precision. - * - * @author Hans Lellelid <hans@xmpl.org> (Phing) - * @author Bruce Atherton <bruce@callenish.com> (Ant) - * @version $Revision: 1.10 $ - * @package phing.types.selecctors - */ -class DateSelector extends BaseExtendSelector { - - private $seconds = -1; // millis in Ant, but PHP doesn't support that level of precision - private $dateTime = null; - private $includeDirs = false; - private $granularity = 0; - private $cmp = 2; - const MILLIS_KEY = "millis"; - const DATETIME_KEY = "datetime"; - const CHECKDIRS_KEY = "checkdirs"; - const GRANULARITY_KEY = "granularity"; - const WHEN_KEY = "when"; - private static $timeComparisons = array("before", "after", "equal"); - - public function __construct() { - //if (Os.isFamily("dos")) { - // granularity = 2000; - //} - } - - public function toString() { - $buf = "{dateselector date: "; - $buf .= $this->dateTime; - $buf .= " compare: "; - if ($this->cmp === 0) { - $buf .= "before"; - } elseif ($this->cmp === 1) { - $buf .= "after"; - } else { - $buf .= "equal"; - } - $buf .= " granularity: "; - $buf .= $this->granularity; - $buf .= "}"; - return $buf; - } - - /** - * For users that prefer to express time in seconds since 1970 - * - * @param int $seconds the time to compare file's last modified date to, - * expressed in milliseconds - */ - public function setSeconds($seconds) { - $this->seconds = (int) $seconds; - } - - /** - * Returns the seconds value the selector is set for. - */ - public function getSeconds() { - return $this->seconds; - } - - /** - * Sets the date. The user must supply it in MM/DD/YYYY HH:MM AM_PM - * format - * - * @param string $dateTime a string in MM/DD/YYYY HH:MM AM_PM format - */ - public function setDatetime($dateTime) { - $dt = strtotime($dateTime); - if ($dt == -1) { - $this->setError("Date of " . $dateTime - . " Cannot be parsed correctly. It should be in" - . " a format parsable by PHP's strtotime() function."); - } else { - $this->dateTime = $dateTime; - $this->setSeconds($dt); - } - } - - /** - * Should we be checking dates on directories? - * - * @param boolean $includeDirs whether to check the timestamp on directories - */ - public function setCheckdirs($includeDirs) { - $this->includeDirs = (boolean) $includeDirs; - } - - /** - * Sets the number of milliseconds leeway we will give before we consider - * a file not to have matched a date. - * @param int $granularity - */ - public function setGranularity($granularity) { - $this->granularity = (int) $granularity; - } - - /** - * Sets the type of comparison to be done on the file's last modified - * date. - * - * @param string $cmp The comparison to perform - */ - public function setWhen($cmp) { - $idx = array_search($cmp, self::$timeComparisons, true); - if ($idx === null) { - $this->setError("Invalid value for ".WHEN_KEY.": ".$cmp); - } else { - $this->cmp = $idx; - } - } - - /** - * When using this as a custom selector, this method will be called. - * It translates each parameter into the appropriate setXXX() call. - * - * @param array $parameters the complete set of parameters for this selector - */ - public function setParameters($parameters) { - parent::setParameters($parameters); - if ($parameters !== null) { - for ($i=0,$size=count($parameters); $i < $size; $i++) { - $paramname = $parameters[$i]->getName(); - switch(strtolower($paramname)) { - case self::MILLIS_KEY: - $this->setMillis($parameters[$i]->getValue()); - break; - case self::DATETIME_KEY: - $this->setDatetime($parameters[$i]->getValue()); - break; - case self::CHECKDIRS_KEY: - $this->setCheckdirs($parameters[$i]->getValue()); - break; - case self::GRANULARITY_KEY: - $this->setGranularity($parameters[$i]->getValue()); - break; - case self::WHEN_KEY: - $this->setWhen($parameters[$i]->getValue()); - break; - default: - $this->setError("Invalid parameter " . $paramname); - } // switch - } - } - } - - /** - * This is a consistency check to ensure the selector's required - * values have been set. - */ - public function verifySettings() { - if ($this->dateTime === null && $this->seconds < 0) { - $this->setError("You must provide a datetime or the number of " - . "seconds."); - } elseif ($this->seconds < 0) { - $this->setError("Date of " . $this->dateTime - . " results in negative seconds" - . " value relative to epoch (January 1, 1970, 00:00:00 GMT)."); - } - } - - /** - * The heart of the matter. This is where the selector gets to decide - * on the inclusion of a file in a particular fileset. - * - * @param PhingFile $basedir the base directory the scan is being done from - * @param string $filename is the name of the file to check - * @param PhingFile $file is a PhingFile object the selector can use - * @return boolean Whether the file should be selected or not - */ - public function isSelected(PhingFile $basedir, $filename, PhingFile $file) { - $this->validate(); - if ($file->isDirectory() && ($this->includeDirs === false)) { - return true; - } - if ($this->cmp === 0) { - return (($file->lastModified() - $this->granularity) < $this->seconds); - } elseif ($this->cmp === 1) { - return (($file->lastModified() . $this->granularity) > $this->seconds); - } else { - return (abs($file->lastModified() - $this->seconds) <= $this->granularity); - } - } - -} - - diff --git a/buildscripts/phing/classes/phing/types/selectors/DependSelector.php b/buildscripts/phing/classes/phing/types/selectors/DependSelector.php deleted file mode 100644 index db73c512..00000000 --- a/buildscripts/phing/classes/phing/types/selectors/DependSelector.php +++ /dev/null @@ -1,151 +0,0 @@ -<?php - -/* - * $Id: DependSelector.php,v 1.8 2005/05/26 13:10:53 mrook Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -require_once 'phing/types/selectors/BaseSelector.php'; - -/** - * Selector that filters files based on whether they are newer than - * a matching file in another directory tree. It can contain a mapper - * element, so isn't available as an ExtendSelector (since those - * parameters can't hold other elements). - * - * @author Hans Lellelid <hans@xmpl.org> (Phing) - * @author Bruce Atherton <bruce@callenish.com> (Ant) - * @version $Revision: 1.8 $ - * @package phing.types.selectors - */ -class DependSelector extends BaseSelector { - - private $targetdir = null; - private $mapperElement = null; - private $map = null; - private $granularity = 0; - - public function __construct() { - // not yet supported: - //if (Os.isFamily("dos")) { - // $this->granularity = 2000; - //} - } - - public function toString() { - $buf = "{dependselector targetdir: "; - if ($this->targetdir === null) { - $buf .= "NOT YET SET"; - } else { - $buf .= $this->targetdir->getName(); - } - $buf .= " granularity: "; - $buf .= $this->granularity; - if ($this->map !== null) { - $buf .= " mapper: "; - $buf .= $this->map->toString(); - } elseif ($this->mapperElement !== null) { - $buf .= " mapper: "; - $buf .= $this->mapperElement->toString(); - } - $buf .= "}"; - return $buf; - } - - /** - * The name of the file or directory which is checked for out-of-date - * files. - * - * @param targetdir the directory to scan looking for files. - */ - public function setTargetdir(PhingFile $targetdir) { - $this->targetdir = $targetdir; - } - - /** - * Sets the number of milliseconds leeway we will give before we consider - * a file out of date. - */ - public function setGranularity($granularity) { - $this->granularity = (int) granularity; - } - - /** - * Defines the FileNameMapper to use (nested mapper element). - * @throws BuildException - */ - public function createMapper() { - if ($this->mapperElement !== null) { - throw new BuildException("Cannot define more than one mapper"); - } - $this->mapperElement = new Mapper($this->project); - return $this->mapperElement; - } - - - /** - * Checks to make sure all settings are kosher. In this case, it - * means that the dest attribute has been set and we have a mapper. - */ - public function verifySettings() { - if ($this->targetdir === null) { - $this->setError("The targetdir attribute is required."); - } - if ($this->mapperElement === null) { - $this->map = new IdentityMapper(); - } else { - $this->map = $this->mapperElement->getImplementation(); - } - if ($this->map === null) { - $this->setError("Could not set <mapper> element."); - } - } - - /** - * The heart of the matter. This is where the selector gets to decide - * on the inclusion of a file in a particular fileset. - * - * @param basedir the base directory the scan is being done from - * @param filename is the name of the file to check - * @param file is a PhingFile object the selector can use - * @return whether the file should be selected or not - */ - public function isSelected(PhingFile $basedir, $filename, PhingFile $file) { - - $this->validate(); - - // Determine file whose out-of-dateness is to be checked - $destfiles = $this->map->main($filename); - - // If filename does not match the To attribute of the mapper - // then filter it out of the files we are considering - if ($destfiles === null) { - return false; - } - // Sanity check - if (count($destfiles) !== 1 || $destfiles[0] === null) { - throw new BuildException("Invalid destination file results for " . $this->targetdir . " with filename " . $filename); - } - $destname = $destfiles[0]; - $destfile = new PhingFile($this->targetdir, $destname); - - return SelectorUtils::isOutOfDate($file, $destfile, $this->granularity); - } - -} - diff --git a/buildscripts/phing/classes/phing/types/selectors/DepthSelector.php b/buildscripts/phing/classes/phing/types/selectors/DepthSelector.php deleted file mode 100644 index 3faafe96..00000000 --- a/buildscripts/phing/classes/phing/types/selectors/DepthSelector.php +++ /dev/null @@ -1,158 +0,0 @@ -<?php -/* - * $Id: DepthSelector.php,v 1.7 2005/05/26 13:10:53 mrook Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -require_once 'phing/types/selectors/BaseExtendSelector.php'; - -/** - * Selector that filters files based on the how deep in the directory - * tree they are. - * - * @author Hans Lellelid <hans@xmpl.org> (Phing) - * @author Bruce Atherton <bruce@callenish.com> (Ant) - * @version $Revision: 1.7 $ - * @package phing.types.selectors - */ -class DepthSelector extends BaseExtendSelector { - - public $min = -1; - public $max = -1; - const MIN_KEY = "min"; - const MAX_KEY = "max"; - - public function toString() { - $buf = "{depthselector min: "; - $buf .= $this->min; - $buf .= " max: "; - $buf .= $this->max; - $buf .= "}"; - return $buf; - } - - /** - * The minimum depth below the basedir before a file is selected. - * - * @param min minimum directory levels below basedir to go - */ - public function setMin($min) { - $this->min = (int) $min; - } - - /** - * The minimum depth below the basedir before a file is selected. - * - * @param min maximum directory levels below basedir to go - */ - public function setMax($max) { - $this->max = (int) $max; - } - - /** - * When using this as a custom selector, this method will be called. - * It translates each parameter into the appropriate setXXX() call. - * - * @param parameters the complete set of parameters for this selector - */ - public function setParameters($parameters) { - parent::setParameters($parameters); - if ($parameters !== null) { - for ($i = 0, $size=count($parameters); $i < $size; $i++) { - $paramname = $parameters[$i]->getName(); - switch(strtolower($paramname)) { - case self::MIN_KEY: - $this->setMin($parameters[$i]->getValue()); - break; - case self::MAX_KEY: - $this->setMax($parameters[$i]->getValue()); - break; - - default: - $this->setError("Invalud parameter " . $paramname); - } // switch - } - } - } - - /** - * Checks to make sure all settings are kosher. In this case, it - * means that the max depth is not lower than the min depth. - */ - public function verifySettings() { - if ($this->min < 0 && $this->max < 0) { - $this->setError("You must set at least one of the min or the " . - "max levels."); - } - if ($this->max < $this->min && $this->max > -1) { - $this->setError("The maximum depth is lower than the minimum."); - } - } - - /** - * The heart of the matter. This is where the selector gets to decide - * on the inclusion of a file in a particular fileset. Most of the work - * for this selector is offloaded into SelectorUtils, a static class - * that provides the same services for both FilenameSelector and - * DirectoryScanner. - * - * @param basedir the base directory the scan is being done from - * @param filename is the name of the file to check - * @param file is a PhingFile object the selector can use - * @return whether the file should be selected or not - */ - public function isSelected(PhingFile $basedir, $filename, PhingFile $file) { - - $this->validate(); - - $depth = -1; - // If you felt daring, you could cache the basedir absolute path - $abs_base = $basedir->getAbsolutePath(); - $abs_file = $file->getAbsolutePath(); - - $tok_base = explode(DIRECTORY_SEPARATOR, $abs_base); - $tok_file = explode(DIRECTORY_SEPARATOR, $abs_file); - - for($i=0,$size=count($tok_file); $i < $size; $i++) { - $filetoken = $tok_file[$i]; - if (isset($tok_base[$i])) { - $basetoken = $tok_base[$i]; - // Sanity check. Ditch it if you want faster performance - if ($basetoken !== $filetoken) { - throw new BuildException("File " . $filename . - " does not appear within " . $abs_base . "directory"); - } - } else { // no more basepath tokens - $depth++; - if ($this->max > -1 && $depth > $this->max) { - return false; - } - } - } - if (isset($tok_base[$i + 1])) { - throw new BuildException("File " . $filename . - " is outside of " . $abs_base . "directory tree"); - } - if ($this->min > -1 && $depth < $this->min) { - return false; - } - return true; - } - -} - diff --git a/buildscripts/phing/classes/phing/types/selectors/ExtendFileSelector.php b/buildscripts/phing/classes/phing/types/selectors/ExtendFileSelector.php deleted file mode 100644 index 84a3ee5b..00000000 --- a/buildscripts/phing/classes/phing/types/selectors/ExtendFileSelector.php +++ /dev/null @@ -1,43 +0,0 @@ -<?php - -/* - * $Id: ExtendFileSelector.php,v 1.5 2004/02/16 05:28:40 hlellelid Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -require_once 'phing/types/Parameterizable.php'; -require_once 'phing/types/selectors/FileSelector.php'; - -/** - * This is the interface to be used by all custom selectors, those that are - * called through the <custom> tag. It is the amalgamation of two - * interfaces, the FileSelector and the Paramterizable interface. Note that - * you will almost certainly want the default behaviour for handling - * Parameters, so you probably want to use the BaseExtendSelector class - * as the base class for your custom selector rather than implementing - * this interface from scratch. - * - * @author Hans Lellelid <hans@xmpl.org> (Phing) - * @author Bruce Atherton <bruce@callenish.com> (Ant) - * @package phing.types.selectors - */ -interface ExtendFileSelector extends Parameterizable, FileSelector { - // No further methods necessary. This is just an amalgamation of two other - // interfaces. -} - diff --git a/buildscripts/phing/classes/phing/types/selectors/ExtendSelector.php b/buildscripts/phing/classes/phing/types/selectors/ExtendSelector.php deleted file mode 100644 index cc939254..00000000 --- a/buildscripts/phing/classes/phing/types/selectors/ExtendSelector.php +++ /dev/null @@ -1,127 +0,0 @@ -<?php - -/* - * $Id: ExtendSelector.php,v 1.10 2005/05/26 13:10:53 mrook Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -include_once 'phing/util/StringHelper.php'; - -/** - * Selector that selects files by forwarding the request on to other classes. - * - * TODO: - * Consider adding Path (org.apache.tools.ant.types.Path) support to this class - * and to the Mappers class. See Ant versions for implimentation details. - * - * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a> - * @package phing.types.selectors - */ -class ExtendSelector extends BaseSelector { - - private $classname; - private $dynselector; - private $parameters = array(); - - /** - * Sets the classname of the custom selector. - * - * @param classname is the class which implements this selector - */ - public function setClassname($classname) { - $this->classname = $classname; - } - - /** - * Instantiates the identified custom selector class. - */ - public function selectorCreate() { - if ($this->classname !== null && $this->classname !== "") { - try { - // assume it's fully qualified, import it - $cls = Phing::import($this->classname); - - // make sure class exists - if (class_exists($cls)) { - $this->dynselector = new $cls(); - } else { - $this->setError("Selector " . $this->classname . " not initialized, no such class"); - } - } catch (Exception $e) { - $this->setError("Selector " . $this->classname . " not initialized, could not create class: " . $e->getMessage()); - } - } else { - $this->setError("There is no classname specified"); - } - } - - /** - * Create new parameters to pass to custom selector. - * - * @param p The new Parameter object - */ - public function addParam(Parameter $p) { - $this->parameters[] = $p; - } - - /** - * These are errors specific to ExtendSelector only. If there are - * errors in the custom selector, it should throw a BuildException - * when isSelected() is called. - */ - public function verifySettings() { - // Creation is done here rather than in isSelected() because some - // containers may do a validation pass before running isSelected(), - // but we need to check for the existence of the created class. - if ($this->dynselector === null) { - $this->selectorCreate(); - } - - if (empty($this->classname)) { - $this->setError("The classname attribute is required"); - } elseif ($this->dynselector === null) { - $this->setError("Internal Error: The custom selector was not created"); - } elseif ( !($this->dynselector instanceof ExtendFileSelector) && (count($this->parameters) > 0)) { - $this->setError("Cannot set parameters on custom selector that does not " - . "implement ExtendFileSelector."); - } - } - - - /** - * Allows the custom selector to choose whether to select a file. This - * is also where the Parameters are passed to the custom selector, - * since we know we must have them all by now. And since we must know - * both classpath and classname, creating the class is deferred to here - * as well. - * - * @throws BuildException - */ - public function isSelected(PhingFile $basedir, $filename, PhingFile $file) { - - $this->validate(); - - if (count($this->parameters) > 0 && $this->dynselector instanceof ExtendFileSelector) { - // We know that dynselector must be non-null if no error message - $this->dynselector->setParameters($this->parameters); - } - return $this->dynselector->isSelected($basedir, $filename, $file); - } - -} - diff --git a/buildscripts/phing/classes/phing/types/selectors/FileSelector.php b/buildscripts/phing/classes/phing/types/selectors/FileSelector.php deleted file mode 100644 index 05926c86..00000000 --- a/buildscripts/phing/classes/phing/types/selectors/FileSelector.php +++ /dev/null @@ -1,47 +0,0 @@ -<?php - -/* - * $Id: FileSelector.php,v 1.4 2005/05/26 13:10:53 mrook Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -/** - * This is the interface to be used by all selectors. - * - * @author Hans Lellelid, hans@xmpl.org (Phing) - * @author Bruce Atherton, bruce@callenish.com (Ant) - * @package phing.types.selectors - */ -interface FileSelector { - - /** - * Method that each selector will implement to create their - * selection behaviour. If there is a problem with the setup - * of a selector, it can throw a BuildException to indicate - * the problem. - * - * @param basedir A PhingFile object for the base directory - * @param filename The name of the file to check - * @param file A PhingFile object for this filename - * @return whether the file should be selected or not - * @throws BuildException if the selector was not configured correctly - */ - public function isSelected(PhingFile $basedir, $filename, PhingFile $file); - -} - diff --git a/buildscripts/phing/classes/phing/types/selectors/FilenameSelector.php b/buildscripts/phing/classes/phing/types/selectors/FilenameSelector.php deleted file mode 100644 index 2315c888..00000000 --- a/buildscripts/phing/classes/phing/types/selectors/FilenameSelector.php +++ /dev/null @@ -1,157 +0,0 @@ -<?php - -/* - * $Id: FilenameSelector.php,v 1.8 2005/05/26 13:10:53 mrook Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - - -include_once 'phing/types/selectors/BaseExtendSelector.php'; - -/** - * Selector that filters files based on the filename. - * - * @author Hans Lellelid, hans@xmpl.org (Phing) - * @author Bruce Atherton, bruce@callenish.com (Ant) - * @package phing.types.selectors - */ -class FilenameSelector extends BaseExtendSelector { - - private $pattern = null; - private $casesensitive = true; - private $negated = false; - const NAME_KEY = "name"; - const CASE_KEY = "casesensitive"; - const NEGATE_KEY = "negate"; - - public function toString() { - $buf = "{filenameselector name: "; - $buf .= $this->pattern; - $buf .= " negate: "; - if ($this->negated) { - $buf .= "true"; - } else { - $buf .= "false"; - } - $buf .= " casesensitive: "; - if ($this->casesensitive) { - $buf .= "true"; - } else { - $buf .= "false"; - } - $buf .= "}"; - return $buf; - } - - /** - * The name of the file, or the pattern for the name, that - * should be used for selection. - * - * @param pattern the file pattern that any filename must match - * against in order to be selected. - */ - public function setName($pattern) { - $pattern = str_replace('\\', DIRECTORY_SEPARATOR, $pattern); - $pattern = str_replace('/', DIRECTORY_SEPARATOR, $pattern); - - if (StringHelper::endsWith(DIRECTORY_SEPARATOR, $pattern)) { - $pattern .= "**"; - } - $this->pattern = $pattern; - } - - /** - * Whether to ignore case when checking filenames. - * - * @param casesensitive whether to pay attention to case sensitivity - */ - public function setCasesensitive($casesensitive) { - $this->casesensitive = $casesensitive; - } - - /** - * You can optionally reverse the selection of this selector, - * thereby emulating an <exclude> tag, by setting the attribute - * negate to true. This is identical to surrounding the selector - * with <not></not>. - * - * @param negated whether to negate this selection - */ - public function setNegate($negated) { - $this->negated = $negated; - } - - /** - * When using this as a custom selector, this method will be called. - * It translates each parameter into the appropriate setXXX() call. - * - * @param array $parameters the complete set of parameters for this selector - */ - public function setParameters($parameters) { - parent::setParameters($parameters); - if ($parameters !== null) { - for ($i=0, $len=count($parameters); $i < $len; $i++) { - $paramname = $parameters[$i]->getName(); - switch(strtolower($paramname)) { - case self::NAME_KEY: - $this->setName($parameters[$i]->getValue()); - break; - case self::CASE_KEY: - $this->setCasesensitive($parameters[$i]->getValue()); - break; - case self::NEGATE_KEY: - $this->setNegate($parameters[$i]->getValue()); - break; - default: - $this->setError("Invalid parameter " . $paramname); - } - } // for each param - } // if params - } - - /** - * Checks to make sure all settings are kosher. In this case, it - * means that the name attribute has been set. - * - */ - public function verifySettings() { - if ($this->pattern === null) { - $this->setError("The name attribute is required"); - } - } - - /** - * The heart of the matter. This is where the selector gets to decide - * on the inclusion of a file in a particular fileset. Most of the work - * for this selector is offloaded into SelectorUtils, a static class - * that provides the same services for both FilenameSelector and - * DirectoryScanner. - * - * @param basedir the base directory the scan is being done from - * @param filename is the name of the file to check - * @param file is a PhingFile object the selector can use - * @return whether the file should be selected or not - */ - public function isSelected(PhingFile $basedir, $filename, PhingFile $file) { - $this->validate(); - return (SelectorUtils::matchPath($this->pattern, $filename, $this->casesensitive) - === !($this->negated)); - } - -} - diff --git a/buildscripts/phing/classes/phing/types/selectors/MajoritySelector.php b/buildscripts/phing/classes/phing/types/selectors/MajoritySelector.php deleted file mode 100644 index 19e0fb76..00000000 --- a/buildscripts/phing/classes/phing/types/selectors/MajoritySelector.php +++ /dev/null @@ -1,92 +0,0 @@ -<?php - -/* - * $Id: MajoritySelector.php,v 1.6 2005/05/26 13:10:53 mrook Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - - -/** - * This selector is here just to shake up your thinking a bit. Don't get - * too caught up in boolean, there are other ways you can evaluate a - * collection of selectors. This one takes a vote of the selectors it - * contains, and majority wins. You could also have an "all-but-one" - * selector, a "weighted-average" selector, and so on. These are left - * as exercises for the reader (as are the usecases where this would - * be necessary). - * - * @author Hans Lellelid <hans@xmpl.org> (Phing) - * @author Bruce Atherton <bruce@callenish.com> (Ant) - * @package phing.types.selectors - */ -class MajoritySelector extends BaseSelectorContainer { - - private $allowtie = true; - - public function toString() { - $buf = ""; - if ($this->hasSelectors()) { - $buf .= "{majorityselect: "; - $buf .= parent::toString(); - $buf .= "}"; - } - return $buf; - } - - public function setAllowtie($tiebreaker) { - $this->allowtie = $tiebreaker; - } - - /** - * Returns true (the file is selected) if most of the other selectors - * agree. In case of a tie, go by the allowtie setting. That defaults - * to true, meaning in case of a tie, the file is selected. - * - * @param basedir the base directory the scan is being done from - * @param filename is the name of the file to check - * @param file is a PhingFile object for the filename that the selector - * can use - * @return whether the file should be selected or not - */ - public function isSelected(PhingFile $basedir, $filename, PhingFile $file) { - - $this->validate(); - - $yesvotes = 0; - $novotes = 0; - - $selectors = $this->selectorElements(); - for($i=0,$size=count($selectors); $i < $size; $i++) { - $result = $selectors[$i]->isSelected($basedir,$filename,$file); - if ($result) { - $yesvotes = $yesvotes + 1; - } else { - $novotes = $novotes + 1; - } - } - if ($yesvotes > $novotes) { - return true; - } - else if ($novotes > $yesvotes) { - return false; - } - // At this point, we know we have a tie. - return $this->allowtie; - } -} - diff --git a/buildscripts/phing/classes/phing/types/selectors/NoneSelector.php b/buildscripts/phing/classes/phing/types/selectors/NoneSelector.php deleted file mode 100644 index 844078a5..00000000 --- a/buildscripts/phing/classes/phing/types/selectors/NoneSelector.php +++ /dev/null @@ -1,71 +0,0 @@ -<?php -/* - * $Id: NoneSelector.php,v 1.6 2005/05/26 13:10:53 mrook Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -require_once 'phing/types/selectors/BaseSelectorContainer.php'; - -/** - * This selector has a collection of other selectors. All of those selectors - * must refuse to select a file before the file is considered selected by - * this selector. - * - * @author Hans Lellelid <hans@xmpl.org> - * @author Bruce Atherton <bruce@callenish.com> (Ant) - * @package phing.types.selectors - */ -class NoneSelector extends BaseSelectorContainer { - - public function toString() { - $buf = ""; - if ($this->hasSelectors()) { - $buf .= "{noneselect: "; - $buf .= parent::toString(); - $buf .= "}"; - } - return $buf; - } - - /** - * Returns true (the file is selected) only if all other selectors - * agree that the file should not be selected. - * - * @param basedir the base directory the scan is being done from - * @param filename is the name of the file to check - * @param file is a java.io.File object for the filename that the selector - * can use - * @return whether the file should be selected or not - */ - public function isSelected(PhingFile $basedir, $filename, PhingFile $file) { - - $this->validate(); - - $selectors = $this->selectorElements(); - - for($i=0,$size=count($selectors); $i < $size; $i++) { - $result = $selectors[$i]->isSelected($basedir, $filename, $file); - if ($result) { - return false; - } - } - return true; - } - -} - diff --git a/buildscripts/phing/classes/phing/types/selectors/NotSelector.php b/buildscripts/phing/classes/phing/types/selectors/NotSelector.php deleted file mode 100644 index 90237084..00000000 --- a/buildscripts/phing/classes/phing/types/selectors/NotSelector.php +++ /dev/null @@ -1,59 +0,0 @@ -<?php - -/* - * $Id: NotSelector.php,v 1.4 2003/12/24 17:43:26 hlellelid Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -require_once 'phing/types/selectors/NoneSelector.php'; - -/** - * This selector has one other selectors whose meaning it inverts. It - * actually relies on NoneSelector for its implementation of the - * isSelected() method, but it adds a check to ensure there is only one - * other selector contained within. - * - * @author Hans Lellelid <hans@xmpl.org> (Phing) - * @author Bruce Atherton <bruce@callenish.com> (Ant) - * @package phing.types.selectors - */ -class NotSelector extends NoneSelector { - - public function toString() { - $buf = ""; - if ($this->hasSelectors()) { - $buf .= "{notselect: "; - $buf .= parent::toString(); - $buf .= "}"; - } - return $buf; - } - - /** - * Makes sure that there is only one entry, sets an error message if - * not. - */ - public function verifySettings() { - if ($this->selectorCount() != 1) { - $this->setError("One and only one selector is allowed within the " . - "<not> tag"); - } - } - -} - diff --git a/buildscripts/phing/classes/phing/types/selectors/OrSelector.php b/buildscripts/phing/classes/phing/types/selectors/OrSelector.php deleted file mode 100644 index 6a8778fa..00000000 --- a/buildscripts/phing/classes/phing/types/selectors/OrSelector.php +++ /dev/null @@ -1,72 +0,0 @@ -<?php -/* - * $Id: OrSelector.php,v 1.7 2005/05/26 13:10:53 mrook Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -require_once 'phing/types/selectors/BaseSelectorContainer.php'; - -/** - * This selector has a collection of other selectors, any of which have to - * select a file in order for this selector to select it. - * - * @author Hans Lellelid <hans@xmpl.org> (Phing) - * @author Bruce Atherton <bruce@callenish.com> (Ant) - * @package phing.types.selectors - */ -class OrSelector extends BaseSelectorContainer { - - public function toString() { - $buf = ""; - if ($this->hasSelectors()) { - $buf .= "{orselect: "; - $buf .= parent::toString(); - $buf .= "}"; - } - return $buf; - } - - /** - * Returns true (the file is selected) if any of the other selectors - * agree that the file should be selected. - * - * @param basedir the base directory the scan is being done from - * @param filename the name of the file to check - * @param file a PhingFile object for the filename that the selector - * can use - * @return boolean Whether the file should be selected or not - */ - public function isSelected(PhingFile $basedir, $filename, PhingFile $file) { - - $this->validate(); - - $selectors = $this->selectorElements(); - - // First, check that all elements are correctly configured - - for($i=0,$size=count($selectors); $i < $size; $i++) { - $result = $selectors[$i]->isSelected($basedir, $filename, $file); - if ($result) { - return true; - } - } - return false; - } - -} - diff --git a/buildscripts/phing/classes/phing/types/selectors/PresentSelector.php b/buildscripts/phing/classes/phing/types/selectors/PresentSelector.php deleted file mode 100644 index f5f4c880..00000000 --- a/buildscripts/phing/classes/phing/types/selectors/PresentSelector.php +++ /dev/null @@ -1,154 +0,0 @@ -<?php - -/* - * $Id: PresentSelector.php,v 1.9 2005/05/26 13:10:53 mrook Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -/** - * Selector that filters files based on whether they appear in another - * directory tree. It can contain a mapper element, so isn't available - * as an ExtendSelector (since those parameters can't hold other - * elements). - * - * @author Hans Lellelid <hans@xmpl.org> (Phing) - * @author Bruce Atherton <bruce@callenish.com> (Ant) - * @package phing.types.selectors - */ -class PresentSelector extends BaseSelector { - - private $targetdir = null; - private $mapperElement = null; - private $map = null; - private $destmustexist = true; - private static $filePresence = array("srconly", "both"); - - public function toString() { - $buf = "{presentselector targetdir: "; - if ($this->targetdir === null) { - $buf .= "NOT YET SET"; - } else { - $buf .= $this->targetdir->getName(); - } - $buf .= " present: "; - if ($this->destmustexist) { - $buf .= "both"; - } else { - $buf .= "srconly"; - } - if ($this->map !== null) { - $buf .= $this->map->toString(); - } elseif ($this->mapperElement !== null) { - $buf .= $this->mapperElement->toString(); - } - $buf .= "}"; - return $buf; - } - - /** - * The name of the file or directory which is checked for matching - * files. - * - * @param targetdir the directory to scan looking for matching files. - */ - public function setTargetdir(PhingFile $targetdir) { - $this->targetdir = $targetdir; - } - - /** - * Defines the FileNameMapper to use (nested mapper element). - * @throws BuildException - */ - public function createMapper() { - if ($this->mapperElement !== null) { - throw new BuildException("Cannot define more than one mapper"); - } - $this->mapperElement = new Mapper($this->getProject()); - return $this->mapperElement; - } - - - /** - * This sets whether to select a file if its dest file is present. - * It could be a <code>negate</code> boolean, but by doing things - * this way, we get some documentation on how the system works. - * A user looking at the documentation should clearly understand - * that the ONLY files whose presence is being tested are those - * that already exist in the source directory, hence the lack of - * a <code>destonly</code> option. - * - * @param string $fp An attribute set to either <code>srconly</code or - * ><code>both</code>. - */ - public function setPresent($fp) { - $idx = array_search($fp, self::$filePresence, true); - if ( $idx === 0 ) { - $this->destmustexist = false; - } - } - - /** - * Checks to make sure all settings are kosher. In this case, it - * means that the targetdir attribute has been set and we have a mapper. - */ - public function verifySettings() { - if ($this->targetdir === null) { - $this->setError("The targetdir attribute is required."); - } - if ($this->mapperElement === null) { - $this->map = new IdentityMapper(); - } else { - $this->map = $this->mapperElement->getImplementation(); - } - if ($this->map === null) { - $this->setError("Could not set <mapper> element."); - } - } - - /** - * The heart of the matter. This is where the selector gets to decide - * on the inclusion of a file in a particular fileset. - * - * @param basedir the base directory the scan is being done from - * @param filename is the name of the file to check - * @param file is a PhingFile object the selector can use - * @return whether the file should be selected or not - */ - public function isSelected(PhingFile $basedir, $filename, PhingFile $file) { - - $this->validate(); - - // Determine file whose existence is to be checked - $destfiles = $this->map->main($filename); - // If filename does not match the To attribute of the mapper - // then filter it out of the files we are considering - if ($destfiles === null) { - return false; - } - // Sanity check - if (count($destfiles) !== 1 || $destfiles[0] === null) { - throw new BuildException("Invalid destination file results for " - . $this->targetdir . " with filename " . $filename); - } - $destname = $destfiles[0]; - $destfile = new PhingFile($this->targetdir, $destname); - return $destfile->exists() === $this->destmustexist; - } - -} - diff --git a/buildscripts/phing/classes/phing/types/selectors/SelectSelector.php b/buildscripts/phing/classes/phing/types/selectors/SelectSelector.php deleted file mode 100644 index a7644447..00000000 --- a/buildscripts/phing/classes/phing/types/selectors/SelectSelector.php +++ /dev/null @@ -1,124 +0,0 @@ -<?php - -/* - * $Id: SelectSelector.php,v 1.6 2003/12/24 17:43:26 hlellelid Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -require_once 'phing/types/selectors/AndSelector.php'; - -/** - * This selector just holds one other selector and forwards all - * requests to it. It exists so that there is a single selector - * type that can exist outside of any targets, as an element of - * project. It overrides all of the reference stuff so that it - * works as expected. Note that this is the only selector you - * can reference. - * - * @author Hans Lellelid <hans@xmpl.org> (Phing) - * @author Bruce Atherton <bruce@callenish.com> (Ant) - * @version $Revision: 1.6 $ - * @package phing.types.selectors - */ -class SelectSelector extends AndSelector { - - public function toString() { - $buf = ""; - if ($this->hasSelectors()) { - $buf .= "{select: "; - $buf .= parent::toString(); - $buf .= "}"; - } - return $buf; - } - - /** - * Performs the check for circular references and returns the - * referenced Selector. - */ - private function getRef() { - $o = $this->getCheckedRef(get_class($this), "SelectSelector"); - return $o; - } - - /** - * Indicates whether there are any selectors here. - */ - public function hasSelectors() { - if ($this->isReference()) { - return $this->getRef()->hasSelectors(); - } - return parent::hasSelectors(); - } - - /** - * Gives the count of the number of selectors in this container - */ - public function selectorCount() { - if ($this->isReference()) { - return $this->getRef()->selectorCount(); - } - return parent::selectorCount(); - } - - /** - * Returns the set of selectors as an array. - */ - public function getSelectors(Project $p) { - if ($this->isReference()) { - return $this->getRef()->getSelectors($p); - } - return parent::getSelectors($p); - } - - /** - * Returns an enumerator for accessing the set of selectors. - */ - public function selectorElements() { - if ($this->isReference()) { - return $this->getRef()->selectorElements(); - } - return parent::selectorElements(); - } - - /** - * Add a new selector into this container. - * - * @param selector the new selector to add - * @return the selector that was added - */ - public function appendSelector(FileSelector $selector) { - if ($this->isReference()) { - throw $this->noChildrenAllowed(); - } - parent::appendSelector($selector); - } - - /** - * Makes sure that there is only one entry, sets an error message if - * not. - */ - public function verifySettings() { - if ($this->selectorCount() != 1) { - $this->setError("One and only one selector is allowed within the " - . "<selector> tag"); - } - } - -} - diff --git a/buildscripts/phing/classes/phing/types/selectors/SelectorContainer.php b/buildscripts/phing/classes/phing/types/selectors/SelectorContainer.php deleted file mode 100644 index 4a73b113..00000000 --- a/buildscripts/phing/classes/phing/types/selectors/SelectorContainer.php +++ /dev/null @@ -1,141 +0,0 @@ -<?php - -/* - * $Id: SelectorContainer.php,v 1.3 2003/11/19 05:48:30 hlellelid Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - - -/** - * This is the interface for selectors that can contain other selectors. - * - * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a> - * @package phing.types.selectors - */ -interface SelectorContainer { - - /** - * Indicates whether there are any selectors here. - * - * @return whether any selectors are in this container - */ - public function hasSelectors(); - - /** - * Gives the count of the number of selectors in this container - * - * @return the number of selectors in this container - */ - public function selectorCount(); - - /** - * Returns a *copy* of the set of selectors as an array. - * - * @return an array of selectors in this container - */ - public function getSelectors(Project $p); - - /** - * Returns an array for accessing the set of selectors. - * - * @return an enumerator that goes through each of the selectors - */ - public function selectorElements(); - - /** - * Add a new selector into this container. - * - * @param selector the new selector to add - * @return the selector that was added - */ - public function appendSelector(FileSelector $selector); - - /* Methods below all add specific selectors */ - - /** - * add a "Select" selector entry on the selector list - */ - public function createSelector(); - - /** - * add an "And" selector entry on the selector list - */ - public function createAnd(); - - /** - * add an "Or" selector entry on the selector list - */ - public function createOr(); - - /** - * add a "Not" selector entry on the selector list - */ - public function createNot(); - - /** - * add a "None" selector entry on the selector list - */ - public function createNone(); - - /** - * add a majority selector entry on the selector list - */ - public function createMajority(); - - /** - * add a selector date entry on the selector list - */ - public function createDate(); - - /** - * add a selector size entry on the selector list - */ - public function createSize(); - - /** - * add a selector filename entry on the selector list - */ - public function createFilename(); - - /** - * add an extended selector entry on the selector list - */ - public function createCustom(); - - /** - * add a contains selector entry on the selector list - */ - public function createContains(); - - /** - * add a present selector entry on the selector list - */ - public function createPresent(); - - /** - * add a depth selector entry on the selector list - */ - public function createDepth(); - - /** - * add a depends selector entry on the selector list - */ - public function createDepend(); - -} - diff --git a/buildscripts/phing/classes/phing/types/selectors/SelectorScanner.php b/buildscripts/phing/classes/phing/types/selectors/SelectorScanner.php deleted file mode 100644 index f5bb898a..00000000 --- a/buildscripts/phing/classes/phing/types/selectors/SelectorScanner.php +++ /dev/null @@ -1,55 +0,0 @@ -<?php - -/* - * $Id: SelectorScanner.php,v 1.3 2003/11/19 05:48:30 hlellelid Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - - -/** - * An interface used to describe the actions required by any type of - * directory scanner that supports Selecters. - * - * @author Hans Lellelid <hans@xmpl.org> (Phing) - * @author Bruce Atherton <bruce@callenish.com> (Ant) - * @package phing.types.selectors - */ -interface SelectorScanner { - - /** - * Sets the selectors the scanner should use. - * - * @param selectors the list of selectors - */ - public function setSelectors($selectors); - - /** - * Directories which were selected out of a scan. - * - * @param selectors list selector objects - */ - public function getDeselectedDirectories(); - - /** - * Files which were selected out of a scan. - * - * @param selectors list selector objects - */ - public function getDeselectedFiles(); - -} diff --git a/buildscripts/phing/classes/phing/types/selectors/SelectorUtils.php b/buildscripts/phing/classes/phing/types/selectors/SelectorUtils.php deleted file mode 100644 index 87247e97..00000000 --- a/buildscripts/phing/classes/phing/types/selectors/SelectorUtils.php +++ /dev/null @@ -1,440 +0,0 @@ -<?php - -/* - * $Id: SelectorUtils.php,v 1.5 2005/05/26 13:10:53 mrook Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -include_once 'phing/util/StringHelper.php'; - -/** - * <p>This is a utility class used by selectors and DirectoryScanner. The - * functionality more properly belongs just to selectors, but unfortunately - * DirectoryScanner exposed these as protected methods. Thus we have to - * support any subclasses of DirectoryScanner that may access these methods. - * </p> - * <p>This is a Singleton.</p> - * - * @author Hans Lellelid, hans@xmpl.org (Phing) - * @author Arnout J. Kuiper, ajkuiper@wxs.nl (Ant) - * @author Magesh Umasankar - * @author Bruce Atherton, bruce@callenish.com (Ant) - * @package phing.types.selectors - */ -class SelectorUtils { - - private static $instance; - - /** - * Retrieves the instance of the Singleton. - */ - public function getInstance() { - if (!isset(self::$instance)) { - self::$instance = new SelectorUtils(); - } - return self::$instance; - } - - /** - * Tests whether or not a given path matches the start of a given - * pattern up to the first "**". - * <p> - * This is not a general purpose test and should only be used if you - * can live with false positives. For example, <code>pattern=**\a</code> - * and <code>str=b</code> will yield <code>true</code>. - * - * @param pattern The pattern to match against. Must not be - * <code>null</code>. - * @param str The path to match, as a String. Must not be - * <code>null</code>. - * @param isCaseSensitive Whether or not matching should be performed - * case sensitively. - * - * @return whether or not a given path matches the start of a given - * pattern up to the first "**". - */ - public function matchPatternStart($pattern, $str, $isCaseSensitive = true) { - - // When str starts with a DIRECTORY_SEPARATOR, pattern has to start with a - // DIRECTORY_SEPARATOR. - // When pattern starts with a DIRECTORY_SEPARATOR, str has to start with a - // DIRECTORY_SEPARATOR. - if (StringHelper::startsWith(DIRECTORY_SEPARATOR, $str) !== - StringHelper::startsWith(DIRECTORY_SEPARATOR, $pattern)) { - return false; - } - - $patDirs = explode(DIRECTORY_SEPARATOR, $pattern); - $strDirs = explode(DIRECTORY_SEPARATOR, $str); - - $patIdxStart = 0; - $patIdxEnd = count($patDirs)-1; - $strIdxStart = 0; - $strIdxEnd = count($strDirs)-1; - - // up to first '**' - while ($patIdxStart <= $patIdxEnd && $strIdxStart <= $strIdxEnd) { - $patDir = $patDirs[$patIdxStart]; - if ($patDir == "**") { - break; - } - if (!self::match($patDir, $strDirs[$strIdxStart], $isCaseSensitive)) { - return false; - } - $patIdxStart++; - $strIdxStart++; - } - - if ($strIdxStart > $strIdxEnd) { - // String is exhausted - return true; - } elseif ($patIdxStart > $patIdxEnd) { - // String not exhausted, but pattern is. Failure. - return false; - } else { - // pattern now holds ** while string is not exhausted - // this will generate false positives but we can live with that. - return true; - } - } - - /** - * Tests whether or not a given path matches a given pattern. - * - * @param pattern The pattern to match against. Must not be - * <code>null</code>. - * @param str The path to match, as a String. Must not be - * <code>null</code>. - * @param isCaseSensitive Whether or not matching should be performed - * case sensitively. - * - * @return <code>true</code> if the pattern matches against the string, - * or <code>false</code> otherwise. - */ - public function matchPath($pattern, $str, $isCaseSensitive = true) { - - // When str starts with a DIRECTORY_SEPARATOR, pattern has to start with a - // DIRECTORY_SEPARATOR. - // When pattern starts with a DIRECTORY_SEPARATOR, str has to start with a - // DIRECTORY_SEPARATOR. - if (StringHelper::startsWith(DIRECTORY_SEPARATOR, $str) !== - StringHelper::startsWith(DIRECTORY_SEPARATOR, $pattern)) { - return false; - } - - $patDirs = explode(DIRECTORY_SEPARATOR, $pattern); - $strDirs = explode(DIRECTORY_SEPARATOR, $str); - - $patIdxStart = 0; - $patIdxEnd = count($patDirs)-1; - $strIdxStart = 0; - $strIdxEnd = count($strDirs)-1; - - // up to first '**' - while ($patIdxStart <= $patIdxEnd && $strIdxStart <= $strIdxEnd) { - $patDir = $patDirs[$patIdxStart]; - if ($patDir == "**") { - break; - } - if (!self::match($patDir, $strDirs[$strIdxStart], $isCaseSensitive)) { - return false; - } - $patIdxStart++; - $strIdxStart++; - } - if ($strIdxStart > $strIdxEnd) { - // String is exhausted - for ($i=$patIdxStart; $i <= $patIdxEnd; $i++) { - if ($patDirs[$i] != "**") { - return false; - } - } - return true; - } elseif ($patIdxStart > $patIdxEnd) { - // String not exhausted, but pattern is. Failure. - return false; - } - - // up to last '**' - while ($patIdxStart <= $patIdxEnd && $strIdxStart <= $strIdxEnd) { - $patDir = $patDirs[$patIdxEnd]; - if ($patDir == "**") { - break; - } - if (!self::match($patDir, $strDirs[$strIdxEnd], $isCaseSensitive)) { - return false; - } - $patIdxEnd--; - $strIdxEnd--; - } - - if ($strIdxStart > $strIdxEnd) { - // String is exhausted - for ($i = $patIdxStart; $i <= $patIdxEnd; $i++) { - if ($patDirs[$i] != "**") { - return false; - } - } - return true; - } - - while ($patIdxStart != $patIdxEnd && $strIdxStart <= $strIdxEnd) { - $patIdxTmp = -1; - for ($i = $patIdxStart+1; $i <= $patIdxEnd; $i++) { - if ($patDirs[$i] == "**") { - $patIdxTmp = $i; - break; - } - } - if ($patIdxTmp == $patIdxStart+1) { - // '**/**' situation, so skip one - $patIdxStart++; - continue; - } - // Find the pattern between padIdxStart & padIdxTmp in str between - // strIdxStart & strIdxEnd - $patLength = ($patIdxTmp-$patIdxStart-1); - $strLength = ($strIdxEnd-$strIdxStart+1); - $foundIdx = -1; - - //strLoop: (start of outer loop) - for ($i=0; $i <= $strLength - $patLength; $i++) { - for ($j = 0; $j < $patLength; $j++) { - $subPat = $patDirs[$patIdxStart+$j+1]; - $subStr = $strDirs[$strIdxStart+$i+$j]; - if (!self::match($subPat, $subStr, $isCaseSensitive)) { - continue 2; // continue up two levels (to strLoop:) - } - } - $foundIdx = $strIdxStart+$i; // only reached if all sub patterns matched - break; - } - - if ($foundIdx == -1) { - return false; - } - - $patIdxStart = $patIdxTmp; - $strIdxStart = $foundIdx + $patLength; - } - - for ($i = $patIdxStart; $i <= $patIdxEnd; $i++) { - if ($patDirs[$i] != "**") { - return false; - } - } - - return true; - } - - /** - * Tests whether or not a string matches against a pattern. - * The pattern may contain two special characters:<br> - * '*' means zero or more characters<br> - * '?' means one and only one character - * - * @param pattern The pattern to match against. - * Must not be <code>null</code>. - * @param str The string which must be matched against the pattern. - * Must not be <code>null</code>. - * @param isCaseSensitive Whether or not matching should be performed - * case sensitively. - * - * - * @return <code>true</code> if the string matches against the pattern, - * or <code>false</code> otherwise. - */ - public function match($pattern, $str, $isCaseSensitive = true) { - - $patArr = StringHelper::toCharArray($pattern); - $strArr = StringHelper::toCharArray($str); - $patIdxStart = 0; - $patIdxEnd = count($patArr)-1; - $strIdxStart = 0; - $strIdxEnd = count($strArr)-1; - - $containsStar = false; - for ($i = 0, $size=count($patArr); $i < $size; $i++) { - if ($patArr[$i] == '*') { - $containsStar = true; - break; - } - } - - if (!$containsStar) { - // No '*'s, so we make a shortcut - if ($patIdxEnd != $strIdxEnd) { - return false; // Pattern and string do not have the same size - } - for ($i = 0; $i <= $patIdxEnd; $i++) { - $ch = $patArr[$i]; - if ($ch != '?') { - if ($isCaseSensitive && $ch !== $strArr[$i]) { - return false;// Character mismatch - } - if (!$isCaseSensitive && strtoupper($ch) !== - strtoupper($strArr[$i])) { - return false; // Character mismatch - } - } - } - return true; // String matches against pattern - } - - if ($patIdxEnd == 0) { - return true; // Pattern contains only '*', which matches anything - } - - // Process characters before first star - while(($ch = $patArr[$patIdxStart]) != '*' && $strIdxStart <= $strIdxEnd) { - if ($ch != '?') { - if ($isCaseSensitive && $ch !== $strArr[$strIdxStart]) { - return false;// Character mismatch - } - if (!$isCaseSensitive && strtoupper($ch) !== - strtoupper($strArr[$strIdxStart])) { - return false;// Character mismatch - } - } - $patIdxStart++; - $strIdxStart++; - } - - if ($strIdxStart > $strIdxEnd) { - // All characters in the string are used. Check if only '*'s are - // left in the pattern. If so, we succeeded. Otherwise failure. - for ($i = $patIdxStart; $i <= $patIdxEnd; $i++) { - if ($patArr[$i] != '*') { - return false; - } - } - return true; - } - - // Process characters after last star - while(($ch = $patArr[$patIdxEnd]) != '*' && $strIdxStart <= $strIdxEnd) { - if ($ch != '?') { - if ($isCaseSensitive && $ch !== $strArr[$strIdxEnd]) { - return false;// Character mismatch - } - if (!$isCaseSensitive && strtoupper($ch) !== - strtoupper($strArr[$strIdxEnd])) { - return false;// Character mismatch - } - } - $patIdxEnd--; - $strIdxEnd--; - } - if ($strIdxStart > $strIdxEnd) { - // All characters in the string are used. Check if only '*'s are - // left in the pattern. If so, we succeeded. Otherwise failure. - for ($i = $patIdxStart; $i <= $patIdxEnd; $i++) { - if ($patArr[$i] != '*') { - return false; - } - } - return true; - } - - // process pattern between stars. padIdxStart and patIdxEnd point - // always to a '*'. - while ($patIdxStart !== $patIdxEnd && $strIdxStart <= $strIdxEnd) { - $patIdxTmp = -1; - for ($i = $patIdxStart+1; $i <= $patIdxEnd; $i++) { - if ($patArr[$i] == '*') { - $patIdxTmp = $i; - break; - } - } - if ($patIdxTmp === $patIdxStart + 1) { - // Two stars next to each other, skip the first one. - $patIdxStart++; - continue; - } - // Find the pattern between padIdxStart & padIdxTmp in str between - // strIdxStart & strIdxEnd - $patLength = ($patIdxTmp - $patIdxStart - 1); - $strLength = ($strIdxEnd - $strIdxStart + 1); - $foundIdx = -1; - - //strLoop: - for ($i = 0; $i <= $strLength - $patLength; $i++) { - for ($j = 0; $j < $patLength; $j++) { - $ch = $patArr[$patIdxStart+$j+1]; - if ($ch != '?') { - if ($isCaseSensitive && $ch !== $strArr[$strIdxStart+$i+$j]) { - continue 2; //continue to strLoop: - } - if (!$isCaseSensitive && strtoupper($ch) !== - strtoupper($strArr[$strIdxStart+$i+$j])) { - continue 2; //continue to strLoop: - } - } - } - // only reached if sub loop completed w/o invoking continue 2 - $foundIdx = $strIdxStart + $i; - break; - } - - if ($foundIdx == -1) { - return false; - } - - $patIdxStart = $patIdxTmp; - $strIdxStart = $foundIdx + $patLength; - } - - // All characters in the string are used. Check if only '*'s are left - // in the pattern. If so, we succeeded. Otherwise failure. - for ($i = $patIdxStart; $i <= $patIdxEnd; $i++) { - if ($patArr[$i] != '*') { - return false; - } - } - return true; - } - - /** - * Returns dependency information on these two files. If src has been - * modified later than target, it returns true. If target doesn't exist, - * it likewise returns true. Otherwise, target is newer than src and - * is not out of date, thus the method returns false. It also returns - * false if the src file doesn't even exist, since how could the - * target then be out of date. - * - * @param PhingFile $src the original file - * @param PhingFile $target the file being compared against - * @param int $granularity the amount in seconds of slack we will give in - * determining out of dateness - * @return whether the target is out of date - */ - public function isOutOfDate(PhingFile $src, PhingFile $target, $granularity) { - if (!$src->exists()) { - return false; - } - if (!$target->exists()) { - return true; - } - if (($src->lastModified() - $granularity) > $target->lastModified()) { - return true; - } - return false; - } - -} - diff --git a/buildscripts/phing/classes/phing/types/selectors/SizeSelector.php b/buildscripts/phing/classes/phing/types/selectors/SizeSelector.php deleted file mode 100644 index bbc26423..00000000 --- a/buildscripts/phing/classes/phing/types/selectors/SizeSelector.php +++ /dev/null @@ -1,228 +0,0 @@ -<?php - -/* - * $Id: SizeSelector.php,v 1.8 2005/05/26 13:10:53 mrook Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - - -/** - * Selector that filters files based on their size. - * - * @author Hans Lellelid <hans@xmpl.org> (Phing) - * @author Bruce Atherton <bruce@callenish.com> (Ant) - * @package phing.types.selectors - */ -class SizeSelector extends BaseExtendSelector { - - private $size = -1; - private $multiplier = 1; - private $sizelimit = -1; - private $cmp = 2; - const SIZE_KEY = "value"; - const UNITS_KEY = "units"; - const WHEN_KEY = "when"; - - private static $sizeComparisons = array("less", "more", "equal"); - private static $byteUnits = array("K", "k", "kilo", "KILO", - "Ki", "KI", "ki", "kibi", "KIBI", - "M", "m", "mega", "MEGA", - "Mi", "MI", "mi", "mebi", "MEBI", - "G", "g", "giga", "GIGA", - "Gi", "GI", "gi", "gibi", "GIBI", - "T", "t", "tera", "TERA", - /* You wish! */ "Ti", "TI", "ti", "tebi", "TEBI" - ); - - public function toString() { - $buf = "{sizeselector value: "; - $buf .= $this->sizelimit; - $buf .= "compare: "; - if ($this->cmp === 0) { - $buf .= "less"; - } elseif ($this->cmp === 1) { - $buf .= "more"; - } else { - $buf .= "equal"; - } - $buf .= "}"; - return $buf; - } - - /** - * A size selector needs to know what size to base its selecting on. - * This will be further modified by the multiplier to get an - * actual size limit. - * - * @param size the size to select against expressed in units - */ - public function setValue($size) { - $this->size = $size; - if (($this->multiplier !== 0) && ($this->size > -1)) { - $this->sizelimit = $size * $this->multiplier; - } - } - - /** - * Sets the units to use for the comparison. This is a little - * complicated because common usage has created standards that - * play havoc with capitalization rules. Thus, some people will - * use "K" for indicating 1000's, when the SI standard calls for - * "k". Others have tried to introduce "K" as a multiple of 1024, - * but that falls down when you reach "M", since "m" is already - * defined as 0.001. - * <p> - * To get around this complexity, a number of standards bodies - * have proposed the 2^10 standard, and at least one has adopted - * it. But we are still left with a populace that isn't clear on - * how capitalization should work. - * <p> - * We therefore ignore capitalization as much as possible. - * Completely mixed case is not possible, but all upper and lower - * forms are accepted for all long and short forms. Since we have - * no need to work with the 0.001 case, this practice works here. - * <p> - * This function translates all the long and short forms that a - * unit prefix can occur in and translates them into a single - * multiplier. - * - * @param $units The units to compare the size to. - * @return void - */ - public function setUnits($units) { - $i = array_search($units, self::$byteUnits, true); - if ($i === false) $i = -1; // make it java-like - - $this->multiplier = 0; - if (($i > -1) && ($i < 4)) { - $this->multiplier = 1000; - } elseif (($i > 3) && ($i < 9)) { - $this->multiplier = 1024; - } elseif (($i > 8) && ($i < 13)) { - $this->multiplier = 1000000; - } elseif (($i > 12) && ($i < 18)) { - $this->multiplier = 1048576; - } elseif (($i > 17) && ($i < 22)) { - $this->multiplier = 1000000000; - } elseif (($i > 21) && ($i < 27)) { - $this->multiplier = 1073741824; - } elseif (($i > 26) && ($i < 31)) { - $this->multiplier = 1000000000000; - } elseif (($i > 30) && ($i < 36)) { - $this->multiplier = 1099511627776; - } - if (($this->multiplier > 0) && ($this->size > -1)) { - $this->sizelimit = $this->size * $this->multiplier; - } - } - - /** - * This specifies when the file should be selected, whether it be - * when the file matches a particular size, when it is smaller, - * or whether it is larger. - * - * @param cmp The comparison to perform, an EnumeratedAttribute - */ - public function setWhen($cmp) { - $c = array_search($cmp, self::$sizeComparisons, true); - if ($c !== false) { - $this->cmp = $c; - } - } - - /** - * When using this as a custom selector, this method will be called. - * It translates each parameter into the appropriate setXXX() call. - * - * @param parameters the complete set of parameters for this selector - */ - public function setParameters($parameters) { - parent::setParameters($parameters); - if ($parameters !== null) { - for ($i = 0, $size=count($parameters); $i < $size; $i++) { - $paramname = $parameters[$i]->getName(); - switch(strtolower($paramname)) { - case self::SIZE_KEY: - try { - $this->setValue($parameters[$i]->getValue()); - } catch (Exception $nfe) { - $this->setError("Invalid size setting " - . $parameters[$i]->getValue()); - } - break; - case self::UNITS_KEY: - $this->setUnits($parameters[$i]->getValue()); - break; - case self::WHEN_KEY: - $this->setWhen($parameters[$i]->getValue()); - break; - default: - $this->setError("Invalid parameter " . $paramname); - } - } - } - } - - /** - * <p>Checks to make sure all settings are kosher. In this case, it - * means that the size attribute has been set (to a positive value), - * that the multiplier has a valid setting, and that the size limit - * is valid. Since the latter is a calculated value, this can only - * fail due to a programming error. - * </p> - * <p>If a problem is detected, the setError() method is called. - * </p> - */ - public function verifySettings() { - if ($this->size < 0) { - $this->setError("The value attribute is required, and must be positive"); - } elseif ($this->multiplier < 1) { - $this->setError("Invalid Units supplied, must be K,Ki,M,Mi,G,Gi,T,or Ti"); - } elseif ($this->sizelimit < 0) { - $this->setError("Internal error: Code is not setting sizelimit correctly"); - } - } - - /** - * The heart of the matter. This is where the selector gets to decide - * on the inclusion of a file in a particular fileset. - * - * @param basedir A PhingFile object for the base directory - * @param filename The name of the file to check - * @param file A PhingFile object for this filename - * @return whether the file should be selected or not - */ - public function isSelected(PhingFile $basedir, $filename, PhingFile $file) { - - $this->validate(); - - // Directory size never selected for - if ($file->isDirectory()) { - return true; - } - if ($this->cmp === 0) { - return ($file->length() < $this->sizelimit); - } elseif ($this->cmp === 1) { - return ($file->length() > $this->sizelimit); - } else { - return ($file->length() === $this->sizelimit); - } - } - -} - diff --git a/buildscripts/phing/classes/phing/types/selectors/TypeSelector.php b/buildscripts/phing/classes/phing/types/selectors/TypeSelector.php deleted file mode 100644 index f1532308..00000000 --- a/buildscripts/phing/classes/phing/types/selectors/TypeSelector.php +++ /dev/null @@ -1,113 +0,0 @@ -<?php - -/* - * $Id: TypeSelector.php,v 1.3 2005/05/26 13:10:53 mrook Exp $ - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software consists of voluntary contributions made by many individuals - * and is licensed under the LGPL. For more information please see - * <http://phing.info>. - */ - -require_once 'phing/types/selectors/BaseExtendSelector.php'; - -/** - * Selector that selects a certain kind of file: directory or regular file. - * - * @author Hans Lellelid <hans@xmpl.org> (Phing) - * @author Jeff Turner <jefft@apache.org> (Ant) - * @version $Revision: 1.3 $ - * @package phing.types.selectors - */ -class TypeSelector extends BaseExtendSelector { - - private $type; - - /** Key to used for parameterized custom selector */ - const TYPE_KEY = "type"; - - /** Valid types */ - private static $types = array('file', 'dir'); - - /** - * @return string A string describing this object - */ - public function toString() { - $buf = "{typeselector type: " . $this->type . "}"; - return $buf; - } - - /** - * Set the type of file to require. - * @param string $type The type of file - 'file' or 'dir' - */ - public function setType($type) { - $this->type = $type; - } - - /** - * When using this as a custom selector, this method will be called. - * It translates each parameter into the appropriate setXXX() call. - * - * @param array $parameters the complete set of parameters for this selector - */ - public function setParameters($parameters) { - parent::setParameters($parameters); - if ($parameters !== null) { - for ($i = 0, $size=count($parameters); $i < $size; $i++) { - $paramname = $parameters[$i]->getName(); - if (self::TYPE_KEY == strtolower($paramname)) { - $this->setType($parameters[$i]->getValue()); - } else { - $this->setError("Invalid parameter " . $paramname); - } - } - } - } - - /** - * Checks to make sure all settings are kosher. In this case, it - * means that the pattern attribute has been set. - * - */ - public function verifySettings() { - if ($this->type === null) { - $this->setError("The type attribute is required"); - } elseif (!in_array($this->type, self::$types, true)) { - $this->setError("Invalid type specified; must be one of (" . implode(self::$types) . ")"); - } - } - - /** - * The heart of the matter. This is where the selector gets to decide - * on the inclusion of a file in a particular fileset. - * - * @param PhingFile $basedir the base directory the scan is being done from - * @param string $filename is the name of the file to check - * @param PhingFile $file is a PhingFile object the selector can use - * @return boolean Whether the file should be selected or not - */ - public function isSelected(PhingFile $basedir, $filename, PhingFile $file) { - - // throw BuildException on error - $this->validate(); - - if ($file->isDirectory()) { - return $this->type === 'dir'; - } else { - return $this->type === 'file'; - } - } - -} |