/** * 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()))); } } } } }