/**
  * Validates if the package has suitable install or update instructions
  * 
  * @param	string		$requiredVersion
  * @param	integer		$validationMode
  */
 protected function validateInstructions($requiredVersion, $validationMode)
 {
     $package = $this->getPackage();
     // delivered package does not provide the minimum required version
     if (Package::compareVersion($requiredVersion, $this->archive->getPackageInfo('version'), '>')) {
         throw new PackageValidationException(PackageValidationException::INSUFFICIENT_VERSION, array('packageName' => $package->packageName, 'packageVersion' => $package->packageVersion, 'deliveredPackageVersion' => $this->archive->getPackageInfo('version')));
     }
     // package is not installed yet
     if ($package === null) {
         $instructions = $this->archive->getInstallInstructions();
         if (empty($instructions)) {
             throw new PackageValidationException(PackageValidationException::NO_INSTALL_PATH, array('packageName' => $this->archive->getPackageInfo('name')));
         }
         if ($validationMode == PackageValidationManager::VALIDATION_RECURSIVE) {
             $this->validatePackageInstallationPlugins('install', $instructions);
         }
     } else {
         // package is already installed, check update path
         if (!$this->archive->isValidUpdate($package)) {
             throw new PackageValidationException(PackageValidationException::NO_UPDATE_PATH, array('packageName' => $package->packageName, 'packageVersion' => $package->packageVersion, 'deliveredPackageVersion' => $this->archive->getPackageInfo('version')));
         }
         if ($validationMode === PackageValidationManager::VALIDATION_RECURSIVE) {
             $this->validatePackageInstallationPlugins('update', $this->archive->getUpdateInstructions());
         }
     }
 }