Exemplo n.º 1
0
 /**
  * {@inheritdoc}
  */
 public function getMetadataFor($value)
 {
     $class = $this->getClass($value);
     if (empty($class)) {
         throw InvalidArgumentException::create(InvalidArgumentException::VALUE_IS_NOT_AN_OBJECT, $value);
     }
     if (isset($this->loadedClasses[$class])) {
         return $this->loadedClasses[$class];
     }
     if (null !== $this->cache && ($this->loadedClasses[$class] = $this->cache->fetch($class))) {
         return $this->loadedClasses[$class];
     }
     if (!class_exists($class) && !interface_exists($class)) {
         throw InvalidArgumentException::create(InvalidArgumentException::CLASS_DOES_NOT_EXIST, $class);
     }
     $reflectionClass = new \ReflectionClass($class);
     $classMetadata = $this->createMetadata($reflectionClass);
     if (!$this->loader->loadClassMetadata($classMetadata)) {
         return $classMetadata;
     }
     $this->mergeSuperclasses($classMetadata);
     $this->validate($classMetadata);
     if ($this->eventDispatcher) {
         $this->eventDispatcher->dispatch(ClassMetadataLoadedEvent::LOADED_EVENT, new ClassMetadataLoadedEvent($classMetadata));
     }
     if (null !== $this->cache) {
         $this->cache->save($class, $classMetadata);
     }
     return $this->loadedClasses[$class] = $classMetadata;
 }
Exemplo n.º 2
0
 /**
  * Set the metadata class to be created by this factory
  *
  * @param string $metadataClass
  */
 public function setMetadataClass($metadataClass)
 {
     if (!class_exists($metadataClass) || !is_subclass_of($metadataClass, 'Kcs\\Metadata\\ClassMetadataInterface', true)) {
         throw InvalidArgumentException::create(InvalidArgumentException::INVALID_METADATA_CLASS, $metadataClass);
     }
     $this->metadataClass = $metadataClass;
 }
Exemplo n.º 3
0
 /**
  * Register a processor class for $class
  *
  * @param string $class
  * @param string $processorClass
  */
 public function registerProcessor($class, $processorClass)
 {
     if (!is_subclass_of($processorClass, 'Kcs\\Metadata\\Loader\\Processor\\ProcessorInterface', true)) {
         throw InvalidArgumentException::create(InvalidArgumentException::INVALID_PROCESSOR_INTERFACE_CLASS, $processorClass);
     }
     if (!isset($this->processors[$class])) {
         $this->processors[$class] = $processorClass;
     } elseif (!is_array($this->processors[$class])) {
         $this->processors[$class] = [$this->processors[$class], $processorClass];
     } else {
         $this->processors[$class][] = $processorClass;
     }
 }
Exemplo n.º 4
0
 /**
  * {@inheritdoc}
  */
 public function merge(MetadataInterface $metadata)
 {
     if ($metadata instanceof NullMetadata) {
         return;
     }
     if (!$metadata instanceof ClassMetadataInterface) {
         throw InvalidArgumentException::create(InvalidArgumentException::NOT_MERGEABLE_METADATA, $this, $metadata);
     }
     if (!$this->getReflectionClass()->isSubclassOf($metadata->getReflectionClass()->name)) {
         throw InvalidArgumentException::create(InvalidArgumentException::NOT_MERGEABLE_METADATA, $this->getReflectionClass()->name, $metadata->getReflectionClass()->name);
     }
     $otherAttributes = $metadata->getAttributesMetadata();
     foreach ($otherAttributes as $attrName => $attrMetadata) {
         $target = $this->getAttributeMetadata($attrName);
         if ($target instanceof NullMetadata) {
             $this->attributesMetadata[$attrName] = $attrMetadata;
             continue;
         }
         $target->merge($attrMetadata);
     }
 }