/**
  * @param array $data
  * @return array
  * @throws \Taxonomy\Exception\RuntimeException
  */
 protected function validate(array $data)
 {
     $taxonomy = $data['taxonomy'];
     $parent = isset($data['parent']) ? $data['parent'] : null;
     if (!is_object($taxonomy)) {
         $taxonomy = $data['taxonomy'] = $this->taxonomyManager->getTaxonomy($taxonomy);
     }
     if ($parent && !is_object($parent)) {
         $parent = $data['parent'] = $this->taxonomyManager->getTerm($parent);
     }
     $options = $this->getModuleOptions()->getType($taxonomy->getName());
     if ($parent === null && !$options->isRootable()) {
         throw new RuntimeException(sprintf('Taxonomy "%s" is not rootable.', $taxonomy->getName()));
     } elseif ($parent instanceof TaxonomyTermInterface) {
         $parentType = $parent->getTaxonomy()->getName();
         $objectType = $taxonomy->getName();
         $objectOptions = $this->getModuleOptions()->getType($objectType);
         if (!$objectOptions->isParentAllowed($parentType)) {
             throw new RuntimeException(sprintf('Parent "%s" does not allow child "%s"', $parentType, $objectType));
         }
     }
     $data['term'] = $this->getTermManager()->createTerm($data['term']['name'], $taxonomy->getInstance());
     return $data;
 }