/** * Executes initialization actions required to setup the data structures * related to the tag. * <p> * This includes: * <ul> * <li>creation of the target object</li> * <li>calling the setters for attributes</li> * <li>adding the target to the project</li> * <li>adding a reference to the target (if id attribute is given)</li> * </ul> * * @param $tag * @param $attrs * @throws BuildException * @throws ExpatParseException * @internal param the $string tag that comes in * @internal param attributes $array the tag carries */ public function init($tag, $attrs) { $name = null; $depends = ""; $ifCond = null; $unlessCond = null; $id = null; $description = null; $isHidden = false; $logskipped = false; foreach ($attrs as $key => $value) { switch ($key) { case "name": $name = (string) $value; break; case "depends": $depends = (string) $value; break; case "if": $ifCond = (string) $value; break; case "unless": $unlessCond = (string) $value; break; case "id": $id = (string) $value; break; case "hidden": $isHidden = $value == 'true' || $value == '1' ? true : false; break; case "description": $description = (string) $value; break; case "logskipped": $logskipped = $value; break; default: throw new ExpatParseException("Unexpected attribute '{$key}'", $this->parser->getLocation()); } } if ($name === null) { throw new ExpatParseException("target element appears without a name attribute", $this->parser->getLocation()); } // shorthand $project = $this->configurator->project; // check to see if this target is a dup within the same file if (isset($this->context->getCurrentTargets[$name])) { throw new BuildException("Duplicate target: {$name}", $this->parser->getLocation()); } $this->target = new Target(); $this->target->setHidden($isHidden); $this->target->setIf($ifCond); $this->target->setUnless($unlessCond); $this->target->setDescription($description); $this->target->setLogSkipped(StringHelper::booleanValue($logskipped)); // take care of dependencies if (strlen($depends) > 0) { $this->target->setDepends($depends); } // check to see if target with same name is already defined $projectTargets = $project->getTargets(); if (isset($projectTargets[$name])) { if ($this->configurator->isIgnoringProjectTag() && $this->configurator->getCurrentProjectName() != null && strlen($this->configurator->getCurrentProjectName()) != 0) { // In an impored file (and not completely // ignoring the project tag) $newName = $this->configurator->getCurrentProjectName() . "." . $name; $project->log("Already defined in main or a previous import, " . "define {$name} as {$newName}", Project::MSG_VERBOSE); $name = $newName; } else { $project->log("Already defined in main or a previous import, " . "ignore {$name}", Project::MSG_VERBOSE); $name = null; } } if ($name != null) { $this->target->setName($name); $project->addOrReplaceTarget($name, $this->target); if ($id !== null && $id !== "") { $project->addReference($id, $this->target); } } }
/** * Executes initialization actions required to setup the data structures * related to the tag. * <p> * This includes: * <ul> * <li>creation of the target object</li> * <li>calling the setters for attributes</li> * <li>adding the target to the project</li> * <li>adding a reference to the target (if id attribute is given)</li> * </ul> * * @param string the tag that comes in * @param array attributes the tag carries * @throws ExpatParseException if attributes are incomplete or invalid */ function init($tag, $attrs) { $name = null; $depends = ""; $ifCond = null; $unlessCond = null; $id = null; $description = null; $isHidden = false; foreach ($attrs as $key => $value) { if ($key === "name") { $name = (string) $value; } else { if ($key === "depends") { $depends = (string) $value; } else { if ($key === "if") { $ifCond = (string) $value; } else { if ($key === "unless") { $unlessCond = (string) $value; } else { if ($key === "id") { $id = (string) $value; } else { if ($key === "hidden") { $isHidden = $value == 'true' || $value == '1' ? true : false; } else { if ($key === "description") { $description = (string) $value; } else { throw new ExpatParseException("Unexpected attribute '{$key}'", $this->parser->getLocation()); } } } } } } } } if ($name === null) { throw new ExpatParseException("target element appears without a name attribute", $this->parser->getLocation()); } // shorthand $project = $this->configurator->project; // check to see if this target is a dup within the same file if (isset($this->configurator->getCurrentTargets[$name])) { throw new BuildException("Duplicate target: {$targetName}", $this->parser->getLocation()); } $this->target = new Target(); $this->target->setName($name); $this->target->setHidden($isHidden); $this->target->setIf($ifCond); $this->target->setUnless($unlessCond); $this->target->setDescription($description); // take care of dependencies if (strlen($depends) > 0) { $this->target->setDepends($depends); } $usedTarget = false; // check to see if target with same name is already defined $projectTargets = $project->getTargets(); if (isset($projectTargets[$name])) { $project->log("Already defined in main or a previous import, " . "ignore {$name}", Project::MSG_VERBOSE); } else { $project->addTarget($name, $this->target); if ($id !== null && $id !== "") { $project->addReference($id, $this->target); } $usedTarget = true; } if ($this->configurator->isIgnoringProjectTag() && $this->configurator->getCurrentProjectName() != null && strlen($this->configurator->getCurrentProjectName()) != 0) { // In an impored file (and not completely // ignoring the project tag) $newName = $this->configurator->getCurrentProjectName() . "." . $name; if ($usedTarget) { // clone needs to make target->children a shared reference $newTarget = clone $this->target; } else { $newTarget = $this->target; } $newTarget->setName($newName); $ct = $this->configurator->getCurrentTargets(); $ct[$newName] = $newTarget; $project->addTarget($newName, $newTarget); } }
/** * Executes initialization actions required to setup the project. Usually * this method handles the attributes of a tag. * * @param string the tag that comes in * @param array attributes the tag carries * @param object the ProjectConfigurator object * @throws ExpatParseException if attributes are incomplete or invalid * @access public */ function init($tag, $attrs) { $def = null; $name = null; $id = null; $desc = null; $baseDir = null; $ver = null; // some shorthands $project = $this->configurator->project; $buildFileParent = $this->configurator->buildFileParent; foreach ($attrs as $key => $value) { if ($key === "default") { $def = $value; } elseif ($key === "name") { $name = $value; } elseif ($key === "id") { $id = $value; } elseif ($key === "basedir") { $baseDir = $value; } elseif ($key === "description") { $desc = $value; } elseif ($key === "phingVersion") { $ver = $value; } else { throw new ExpatParseException("Unexpected attribute '{$key}'"); } } // these things get done no matter what if (null != $name) { $canonicalName = self::canonicalName($name); $this->configurator->setCurrentProjectName($canonicalName); $path = (string) $this->configurator->getBuildFile(); $project->setUserProperty("phing.file.{$canonicalName}", $path); $project->setUserProperty("phing.dir.{$canonicalName}", dirname($path)); } if (!$this->configurator->isIgnoringProjectTag()) { if ($def === null) { throw new ExpatParseException("The default attribute of project is required"); } $project->setDefaultTarget($def); if ($name !== null) { $project->setName($name); $project->addReference($name, $project); } if ($id !== null) { $project->addReference($id, $project); } if ($desc !== null) { $project->setDescription($desc); } if ($ver !== null) { $project->setPhingVersion($ver); } if ($project->getProperty("project.basedir") !== null) { $project->setBasedir($project->getProperty("project.basedir")); } else { if ($baseDir === null) { $project->setBasedir($buildFileParent->getAbsolutePath()); } else { // check whether the user has specified an absolute path $f = new PhingFile($baseDir); if ($f->isAbsolute()) { $project->setBasedir($baseDir); } else { $project->setBaseDir($project->resolveFile($baseDir, new PhingFile(getcwd()))); } } } } }