/**
  * Applies a constraint to the query
  *
  * @param Sonata\DoctrinePHPCRAdminBundle\Datagrid\ProxyQuery $queryBuilder
  * @param string $alias has no effect
  * @param string $field field uhere to apply the constraint
  * @param array $data determines the constraint
  * @return
  */
 public function filter($queryBuilder, $alias = null, $field, $data)
 {
     if (!$data || !is_array($data) || !array_key_exists('value', $data)) {
         return;
     }
     $data['value'] = trim($data['value']);
     $data['type'] = !isset($data['type']) ? ChoiceType::TYPE_CONTAINS : $data['type'];
     if (strlen($data['value']) == 0) {
         return;
     }
     $qf = $queryBuilder->getQueryObjectModelFactory();
     switch ($data['type']) {
         case ChoiceType::TYPE_EQUAL:
             $constraint = $qf->comparison($qf->propertyValue($field), Constants::JCR_OPERATOR_EQUAL_TO, $qf->literal($data['value']));
             break;
         case ChoiceType::TYPE_NOT_CONTAINS:
             $constraint = $qf->fulltextSearch($field, "* -" . $data['value'], '[' . $queryBuilder->getNodeType() . ']');
             break;
         case ChoiceType::TYPE_CONTAINS:
             $constraint = $qf->comparison($qf->propertyValue($field), Constants::JCR_OPERATOR_LIKE, $qf->literal('%' . $data['value'] . '%'));
             break;
         case ChoiceType::TYPE_CONTAINS_WORDS:
         default:
             $constraint = $qf->fulltextSearch($field, $data['value'], '[' . $queryBuilder->getNodeType() . ']');
     }
     $queryBuilder->andWhere($constraint);
 }