/** * This function creates a single converter instance. * * @param ConverterDefinition $converterDefinition * * @throws InvalidConverterException * @return ConverterInterface */ public static function createConverterInstance(ConverterDefinition $converterDefinition) { $class = $converterDefinition->getFullQualifiedClassName(); if (!class_exists($class)) { $message = sprintf('The converter "%s" (%s) does not exist.', $converterDefinition->getClassName(), $class); throw new InvalidConverterException($message); } $parameters = $converterDefinition->getParameters(); if ($parameters !== null) { return new $class($parameters); } return new $class(); }
protected function parseConfig(array $config) { if (!isset($config['converters'])) { $config['converters'] = []; } if (!isset($config['filters'])) { $config['filters'] = []; } // Parse converter definitions and create objects foreach ($config['converters'] as $columnName => $converters) { foreach ($converters as $converterDef) { $this->convertersDefinitions[$columnName][] = ConverterDefinition::factory($converterDef); } } // Parse filter configurations and create filter objects foreach ($config['filters'] as $filter) { $operator = $filter[0]; $columnName = $filter[1]; $value = $filter[2]; if ($operator == 'depends') { $referencedColumn = explode('.', $value); if (count($referencedColumn) !== 2) { throw new \InvalidArgumentException('Unexpected format for depends operator "' . $value . '". Expected format "table.column"'); } $referencedTable = $referencedColumn[0]; $referencedColumn = $referencedColumn[1]; $this->dependentTables[] = $referencedTable; $this->filters[] = new DataDependentFilter($columnName, $referencedTable, $referencedColumn); } else { $this->filters[] = new DefaultFilter($columnName, $operator, $value); } } }
/** * @param array $converterDefinitions * * @return ChainConverter */ private function createConditionalConverter($converterDefinitions) { $converters = []; foreach ($converterDefinitions as $definition) { $converterDefinition = ConverterDefinition::factory($definition); $converters[] = DataConverter::createConverterInstance($converterDefinition); } if (count($converters) > 1) { $converter = new ChainConverter($converters); } else { $converter = $converters[0]; } return $converter; }