/**
  * Returns the composer manifest constraints ("require", "suggest" or "conflict") from the given package meta data
  *
  * @param string $constraintType one of the MetaDataInterface::CONSTRAINT_TYPE_* constants
  * @param MetaData $packageMetaData
  * @return array in the format array('<ComposerPackageName>' => '*', ...)
  * @deprecated This will be removed with Flow 4.0 together with the MetaData model
  */
 protected function getComposerManifestConstraints($constraintType, MetaData $packageMetaData)
 {
     $composerManifestConstraints = [];
     $constraints = $packageMetaData->getConstraintsByType($constraintType);
     foreach ($constraints as $constraint) {
         if (!$constraint instanceof MetaData\PackageConstraint) {
             continue;
         }
         $composerName = isset($this->packageStatesConfiguration['packages'][$constraint->getValue()]['composerName']) ? $this->packageStatesConfiguration['packages'][$constraint->getValue()]['composerName'] : ComposerUtility::getComposerPackageNameFromPackageKey($constraint->getValue());
         $composerManifestConstraints[$composerName] = '*';
     }
     return $composerManifestConstraints;
 }
 /**
  * Write a composer manifest for the package.
  *
  * @param string $manifestPath
  * @param string $packageKey
  * @param MetaData $packageMetaData
  * @return void
  */
 protected function writeComposerManifest($manifestPath, $packageKey, \TYPO3\Flow\Package\MetaData $packageMetaData = NULL)
 {
     $manifest = array();
     $nameParts = explode('.', $packageKey);
     $vendor = array_shift($nameParts);
     $manifest['name'] = strtolower($vendor . '/' . implode('-', $nameParts));
     if ($packageMetaData !== NULL) {
         $manifest['type'] = $packageMetaData->getPackageType();
         $manifest['description'] = $packageMetaData->getDescription() ?: 'Add description here';
         if ($packageMetaData->getVersion()) {
             $manifest['version'] = $packageMetaData->getVersion();
         }
         $manifest['require'] = array();
         $dependencies = $packageMetaData->getConstraintsByType(MetaDataInterface::CONSTRAINT_TYPE_DEPENDS);
         foreach ($dependencies as $dependencyConstraint) {
             if ($dependencyConstraint instanceof \TYPO3\Flow\Package\MetaData\PackageConstraint) {
                 if (isset($this->packageStatesConfiguration['packages'][$dependencyConstraint->getValue()]['composerName'])) {
                     $manifest['require'][$this->packageStatesConfiguration['packages'][$dependencyConstraint->getValue()]['composerName']] = '*';
                 }
             }
         }
     } else {
         $manifest['type'] = 'typo3-flow-package';
         $manifest['description'] = '';
     }
     if (!isset($manifest['require']) || empty($manifest['require'])) {
         $manifest['require'] = array('typo3/flow' => '*');
     }
     $manifest['autoload'] = array('psr-0' => array(str_replace('.', '\\', $packageKey) => 'Classes'));
     if (defined('JSON_PRETTY_PRINT')) {
         file_put_contents(Files::concatenatePaths(array($manifestPath, 'composer.json')), json_encode($manifest, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT));
     } else {
         file_put_contents(Files::concatenatePaths(array($manifestPath, 'composer.json')), json_encode($manifest));
     }
 }