Example #1
0
 /**
  * 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;
 }