Exemple #1
0
 /**
  * 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);
         }
     }
 }
Exemple #2
0
 /**
  * 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())));
                 }
             }
         }
     }
 }