protected function addModuleFileToJson(ModuleFile $moduleFile, stdClass $jsonData)
{
$mappings = $moduleFile->getPathMappings();
$bindingDescriptors = $moduleFile->getBindingDescriptors();
$typeDescriptors = $moduleFile->getTypeDescriptors();
$dependencies = $moduleFile->getDependencies();
$extra = $moduleFile->getExtraKeys();
if (null !== $moduleFile->getModuleName()) {
$jsonData->name = $moduleFile->getModuleName();
}
if (count($mappings) > 0) {
$jsonData->resources = new stdClass();
foreach ($mappings as $mapping) {
$puliPath = $mapping->getRepositoryPath();
$localPaths = $mapping->getPathReferences();
$jsonData->resources->{$puliPath} = count($localPaths) > 1 ? $localPaths : reset($localPaths);
}
}
if (count($bindingDescriptors) > 0) {
uasort($bindingDescriptors, array(__CLASS__, 'compareBindingDescriptors'));
$jsonData->bindings = new stdClass();
foreach ($bindingDescriptors as $bindingDescriptor) {
$binding = $bindingDescriptor->getBinding();
$bindingData = new stdClass();
$bindingData->_class = get_class($binding);
// This needs to be moved to external classes to allow adding
// custom binding classes at some point
if ($binding instanceof ResourceBinding) {
$bindingData->query = $binding->getQuery();
if ('glob' !== $binding->getLanguage()) {
$bindingData->language = $binding->getLanguage();
}
} elseif ($binding instanceof ClassBinding) {
$bindingData->class = $binding->getClassName();
}
$bindingData->type = $bindingDescriptor->getTypeName();
// Don't include the default values of the binding type
if ($binding->hasParameterValues(false)) {
$parameterData = $binding->getParameterValues(false);
ksort($parameterData);
$bindingData->parameters = (object) $parameterData;
}
$jsonData->bindings->{$bindingDescriptor->getUuid()->toString()} = $bindingData;
}
}
if (count($typeDescriptors) > 0) {
$bindingTypesData = array();
foreach ($typeDescriptors as $typeDescriptor) {
$type = $typeDescriptor->getType();
$typeData = new stdClass();
if ($typeDescriptor->getDescription()) {
$typeData->description = $typeDescriptor->getDescription();
}
if ($type->hasParameters()) {
$parametersData = array();
foreach ($type->getParameters() as $parameter) {
$parameterData = new stdClass();
if ($typeDescriptor->hasParameterDescription($parameter->getName())) {
$parameterData->description = $typeDescriptor->getParameterDescription($parameter->getName());
}
if ($parameter->isRequired()) {
$parameterData->required = true;
}
if (null !== $parameter->getDefaultValue()) {
$parameterData->default = $parameter->getDefaultValue();
}
$parametersData[$parameter->getName()] = $parameterData;
}
ksort($parametersData);
$typeData->parameters = (object) $parametersData;
}
$bindingTypesData[$type->getName()] = $typeData;
}
ksort($bindingTypesData);
$jsonData->{'binding-types'} = (object) $bindingTypesData;
}
if (count($dependencies) > 0) {
$jsonData->depend = $dependencies;
}
if (count($extra) > 0) {
$jsonData->extra = (object) $extra;
}
}