diff options
Diffstat (limited to 'buildscripts/phing/classes/phing/types/TokenSource.php')
-rw-r--r-- | buildscripts/phing/classes/phing/types/TokenSource.php | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/buildscripts/phing/classes/phing/types/TokenSource.php b/buildscripts/phing/classes/phing/types/TokenSource.php new file mode 100644 index 00000000..c073ece0 --- /dev/null +++ b/buildscripts/phing/classes/phing/types/TokenSource.php @@ -0,0 +1,157 @@ +<?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]; + } +} + + +?> |