<?php
/**
* @copyright (c) 2013
* @package Diba
* @subpackage GenericTree
*/
namespace Diba\GenericTree;
use Diba\Tree\Node as INode;
use Diba\Tree\NodeList as INodeList;
use InvalidArgumentException;
/**
* Opciones utilizdas por una instancia de \Diba\GenericTree\TableTree.
*/
class TableTreeOptions
{
/**
* El comparador utilizado para ordenar los nodos, o "flags" utlizados por
* la función usort().
*
* @see \Diba\GenericTree\NodeList::getComparator()
* @see \Diba\GenericTree\NodeList::sort()
*
* @var callable|int
*/
private $comparator;
/**
* Nombre de la clave del id de entrada.
*
* @var string
*/
private $idKey;
/**
* Nombre de la clave del id padre de entrada.
*
* @var string
*/
private $parentIdKey;
/**
* Constructor
*
* @param string $idKey Clave de entrada del id.
* @param string $parentIdKey Clave de entrada del id padre.
* @param callable|int $comparator El comparador de nodos.
* @return \Diba\GenericTree\TableTreeOptions
* @throws \InvalidArgumentException
* Cuando los argumentos $idKey y/o $parentIdKey no son de tipo string.
* @throws \InvalidArgumentException
* Cuando el argumento $comparator no es de tipo callable o integer.
*/
public function __construct(
$idKey = 'id',
$parentIdKey = 'parentId',
$comparator = \SORT_REGULAR
) {
$this->setComparator($comparator);
$this->setIdKey($idKey);
$this->setParentIdKey($parentIdKey);
}
/**
* Devuelve el comparador establecido.
*
* @return callable|int
*/
public function getComparator()
{
return $this->comparator;
}
/**
* Devuelve el nombre de la clave id establecida.
*
* @return string
*/
public function getIdKey()
{
return $this->idKey;
}
/**
* Devuelve el nombre de la clave id padre establecida.
*
* @return string
*/
public function getParentIdKey()
{
return $this->parentIdKey;
}
/**
* Establece el comparador, y devuelve el anterior.
*
* @param callable|int $comparator El nuevo comparador.
* @return callable|int
* @throws \InvalidArgumentException
* Cuando el argumento $comparator no es de tipo callable o integer.
*/
public function setComparator($comparator)
{
$previousComparator = $this->comparator;
$this->comparator = $comparator;
return $previousComparator;
} else {
throw new InvalidArgumentException
(sprintf( 'Invalid $comparator type: callable/int expected, %s given',
));
}
}
/**
* Establece el nombre de la clave del id, y devuelve el anterior.
*
* @param string $name La nueva clave del id.
* @return string
* @throws \InvalidArgumentException
* Cuando el argumento $name no es de tipo string.
*/
public function setIdKey($name)
{
throw new InvalidArgumentException
(sprintf( 'Invalid $name type: string expected, %s given',
));
}
$previousIdKey = $this->idKey;
$this->idKey = $name;
return $previousIdKey;
}
/**
* Establece el nombre de la clave del id padre, y devuelve el anterior.
*
* @param string $name La nueva clave del id padre.
* @return string
* @throws \InvalidArgumentException
* Cuando el argumento $name no es de tipo string.
*/
public function setParentIdKey($name)
{
throw new InvalidArgumentException
(sprintf( 'Invalid $name type: string expected, %s given',
));
}
$previousParentIdKey = $this->parentIdKey;
$this->parentIdKey = $name;
return $previousParentIdKey;
}
}