/** * Creates and returns a Schema from the given configuration array. * * @param array $configuration * @return Schema[] */ protected function createSchemas(array $configuration) { $processor = new Processor(); $processedConfiguration = $processor->processConfiguration(new SchemaConfiguration(), $configuration); $schemas = []; foreach ($processedConfiguration as $schemaName => $schemaConfig) { $schema = new Schema($schemaName, $schemaConfig['title']); foreach ($schemaConfig['groups'] as $groupName => $groupConfig) { $group = new Group($groupName, $groupConfig['title']); foreach ($groupConfig['characteristics'] as $characteristicName => $characteristicConfig) { $fullName = implode(':', [$schemaName, $groupName, $characteristicName]); $this->validateDefinitionConfig($fullName, $characteristicConfig); $definition = new Definition(); $definition->setName($characteristicName)->setFullName($fullName)->setType($characteristicConfig['type'])->setTitle($characteristicConfig['title'])->setShared($characteristicConfig['shared'])->setVirtual($characteristicConfig['virtual'])->setPropertyPaths($characteristicConfig['property_paths'])->setFormat($characteristicConfig['format'])->setDisplayGroups($characteristicConfig['display_groups']); $group->addDefinition($definition); } $schema->addGroup($group); } $schemas[] = $schema; } return $schemas; }