/**
  * @param DataTypeDefinition $dataTypeDefinition
  * @param array              $values
  *
  * @return mixed
  */
 public function getClippingDefinition($dataTypeDefinition, $values = array(), $attributes = array())
 {
     if ($this->definition->getPropertyName()) {
         $value = null;
         if (strpos($this->definition->getPropertyName(), '.') !== false) {
             $attribute = array_pop(explode('.', $this->definition->getPropertyName()));
             if (array_key_exists($attribute, $attributes)) {
                 $value = $attributes[$attribute];
             }
         } else {
             if (array_key_exists($this->definition->getPropertyName(), $values)) {
                 $value = $values[$this->definition->getPropertyName()];
             }
         }
         $clippingName = $this->definition->getClippingName($value);
     } else {
         $clippingName = $this->definition->getClippingName();
     }
     if ($dataTypeDefinition->hasClippingDefinition($clippingName)) {
         $clippingDefinition = $dataTypeDefinition->getClippingDefinition($clippingName);
         if ($this->definition->hasWorkspacesRestriction()) {
             if (!in_array($this->context->getCurrentWorkspace(), $this->definition->getWorkspaces())) {
                 return false;
             }
         }
         if ($this->definition->hasLanguagesRestriction()) {
             if (!in_array($this->context->getCurrentLanguage(), $this->definition->getLanguages())) {
                 return false;
             }
         }
         return $clippingDefinition;
     } else {
         return false;
     }
 }