<?php

/**
 * Broker expansion
 * @package Broker
 * @subpackage Expansion
 */
namespace BrokerExpansion;

/**
 * ExplodeExpansion
 */
class ExplodeExpansion implements \Broker\Expansion {
  /**
   * Value
   * @var array|string
   */
  private $value;
  /**
   * Split string
   * @var string
   */
  private $split = ",";
  /**
   * Trim
   * @var boolean
   */
  private $trim = true;
  
  /**
   * Explode expansion
   * 
   * @param string|array $value          
   * @param unknown $expansionConfiguration
   * @param unknown $brokerConfiguration
   * @param unknown $solrConfiguration
   */
  public function __construct($value, $expansionConfiguration, $brokerConfiguration, $solrConfiguration) {
    $this->value = $value;
    if ($expansionConfiguration && is_object ( $expansionConfiguration )) {
      if (isset ( $expansionConfiguration->parameters ) && is_object ( $expansionConfiguration->parameters )) {
        if (isset ( $expansionConfiguration->parameters->split ) && is_string ( $expansionConfiguration->parameters->split )) {
          $this->split = $expansionConfiguration->parameters->split;
        }
        if (isset ( $expansionConfiguration->parameters->trim )) {
          if ($expansionConfiguration->parameters->trim) {
            $this->trim = true;
          } else {
            $this->trim = false;
          }
        }
      }
    }
  }
  /**
   * {@inheritDoc}
   * @see \Broker\Expansion::cached()
   */
  public static function cached() {
    return false;
  }
  
  /**
   * {@inheritDoc}
   * @see \Broker\Expansion::description()
   */
  public static function description() {
    return "split value";
  }
  /**
   * {@inheritDoc}
   * @see \Broker\Expansion::parameters()
   */
  public static function parameters() {
    return array (
        "split" => "optional, default using \",\"",
        "trim" => "optional, default true" 
    );
  }
  /**
   * {@inheritDoc}
   * @see \Broker\Expansion::getValues()
   */
  public function getValues() {
    $list = explode ( $this->split, $this->value );
    if ($this->trim) {
      $list = array_map ( "trim", $list );
    }
    return $list;
  }
  /**
   * 
   * {@inheritDoc}
   * @see \Broker\Expansion::getErrors()
   */
  public function getErrors() {
    return null;
  }
}

?>