/**
  * {@inheritdoc}
  */
 public function loadClassMetadata(ClassMetadataInterface $classMetadata)
 {
     if (null === $this->classes) {
         $this->classes = array();
         $xml = $this->parseFile($this->file);
         foreach ($xml->class as $class) {
             $this->classes[(string) $class['name']] = $class;
         }
     }
     $attributesMetadata = $classMetadata->getAttributesMetadata();
     if (isset($this->classes[$classMetadata->getName()])) {
         $xml = $this->classes[$classMetadata->getName()];
         foreach ($xml->attribute as $attribute) {
             $attributeName = (string) $attribute['name'];
             if (isset($attributesMetadata[$attributeName])) {
                 $attributeMetadata = $attributesMetadata[$attributeName];
             } else {
                 $attributeMetadata = new AttributeMetadata($attributeName);
                 $classMetadata->addAttributeMetadata($attributeMetadata);
             }
             foreach ($attribute->group as $group) {
                 $attributeMetadata->addGroup((string) $group);
             }
         }
         return true;
     }
     return false;
 }
Ejemplo n.º 2
0
 /**
  * {@inheritdoc}
  */
 public function loadClassMetadata(ClassMetadataInterface $classMetadata)
 {
     if (null === $this->classes) {
         $this->classes = $this->getClassesFromXml();
     }
     if (!$this->classes) {
         return false;
     }
     $attributesMetadata = $classMetadata->getAttributesMetadata();
     if (isset($this->classes[$classMetadata->getName()])) {
         $xml = $this->classes[$classMetadata->getName()];
         foreach ($xml->attribute as $attribute) {
             $attributeName = (string) $attribute['name'];
             if (isset($attributesMetadata[$attributeName])) {
                 $attributeMetadata = $attributesMetadata[$attributeName];
             } else {
                 $attributeMetadata = new AttributeMetadata($attributeName);
                 $classMetadata->addAttributeMetadata($attributeMetadata);
             }
             foreach ($attribute->group as $group) {
                 $attributeMetadata->addGroup((string) $group);
             }
             if (isset($attribute['max-depth'])) {
                 $attributeMetadata->setMaxDepth((int) $attribute['max-depth']);
             }
         }
         return true;
     }
     return false;
 }
Ejemplo n.º 3
0
 /**
  * {@inheritdoc}
  */
 public function loadClassMetadata(ClassMetadataInterface $classMetadata)
 {
     $reflectionClass = $classMetadata->getReflectionClass();
     $className = $reflectionClass->name;
     $loaded = false;
     $attributesMetadata = $classMetadata->getAttributesMetadata();
     foreach ($reflectionClass->getProperties() as $property) {
         if (!isset($attributesMetadata[$property->name])) {
             $attributesMetadata[$property->name] = new AttributeMetadata($property->name);
             $classMetadata->addAttributeMetadata($attributesMetadata[$property->name]);
         }
         if ($property->getDeclaringClass()->name === $className) {
             foreach ($this->reader->getPropertyAnnotations($property) as $annotation) {
                 if ($annotation instanceof Groups) {
                     foreach ($annotation->getGroups() as $group) {
                         $attributesMetadata[$property->name]->addGroup($group);
                     }
                 } elseif ($annotation instanceof MaxDepth) {
                     $attributesMetadata[$property->name]->setMaxDepth($annotation->getMaxDepth());
                 }
                 $loaded = true;
             }
         }
     }
     foreach ($reflectionClass->getMethods() as $method) {
         if ($method->getDeclaringClass()->name !== $className) {
             continue;
         }
         $accessorOrMutator = preg_match('/^(get|is|has|set)(.+)$/i', $method->name, $matches);
         if ($accessorOrMutator) {
             $attributeName = lcfirst($matches[2]);
             if (isset($attributesMetadata[$attributeName])) {
                 $attributeMetadata = $attributesMetadata[$attributeName];
             } else {
                 $attributesMetadata[$attributeName] = $attributeMetadata = new AttributeMetadata($attributeName);
                 $classMetadata->addAttributeMetadata($attributeMetadata);
             }
         }
         foreach ($this->reader->getMethodAnnotations($method) as $annotation) {
             if ($annotation instanceof Groups) {
                 if (!$accessorOrMutator) {
                     throw new MappingException(sprintf('Groups on "%s::%s" cannot be added. Groups can only be added on methods beginning with "get", "is", "has" or "set".', $className, $method->name));
                 }
                 foreach ($annotation->getGroups() as $group) {
                     $attributeMetadata->addGroup($group);
                 }
             } elseif ($annotation instanceof MaxDepth) {
                 if (!$accessorOrMutator) {
                     throw new MappingException(sprintf('MaxDepth on "%s::%s" cannot be added. MaxDepth can only be added on methods beginning with "get", "is", "has" or "set".', $className, $method->name));
                 }
                 $attributeMetadata->setMaxDepth($annotation->getMaxDepth());
             }
             $loaded = true;
         }
     }
     return $loaded;
 }
Ejemplo n.º 4
0
 /**
  * {@inheritdoc}
  */
 public function loadClassMetadata(ClassMetadataInterface $classMetadata)
 {
     if (null === $this->classes) {
         if (!stream_is_local($this->file)) {
             throw new MappingException(sprintf('This is not a local file "%s".', $this->file));
         }
         if (null === $this->yamlParser) {
             $this->yamlParser = new Parser();
         }
         $classes = $this->yamlParser->parse(file_get_contents($this->file));
         if (empty($classes)) {
             return false;
         }
         // not an array
         if (!is_array($classes)) {
             throw new MappingException(sprintf('The file "%s" must contain a YAML array.', $this->file));
         }
         $this->classes = $classes;
     }
     if (isset($this->classes[$classMetadata->getName()])) {
         $yaml = $this->classes[$classMetadata->getName()];
         if (isset($yaml['attributes']) && is_array($yaml['attributes'])) {
             $attributesMetadata = $classMetadata->getAttributesMetadata();
             foreach ($yaml['attributes'] as $attribute => $data) {
                 if (isset($attributesMetadata[$attribute])) {
                     $attributeMetadata = $attributesMetadata[$attribute];
                 } else {
                     $attributeMetadata = new AttributeMetadata($attribute);
                     $classMetadata->addAttributeMetadata($attributeMetadata);
                 }
                 if (isset($data['groups'])) {
                     if (!is_array($data['groups'])) {
                         throw new MappingException('The "groups" key must be an array of strings in "%s" for the attribute "%s" of the class "%s".', $this->file, $attribute, $classMetadata->getName());
                     }
                     foreach ($data['groups'] as $group) {
                         if (!is_string($group)) {
                             throw new MappingException('Group names must be strings in "%s" for the attribute "%s" of the class "%s".', $this->file, $attribute, $classMetadata->getName());
                         }
                         $attributeMetadata->addGroup($group);
                     }
                 }
                 if (isset($data['max_depth'])) {
                     if (!is_int($data['max_depth'])) {
                         throw new MappingException('The "max_depth" value must an integer  in "%s" for the attribute "%s" of the class "%s".', $this->file, $attribute, $classMetadata->getName());
                     }
                     $attributeMetadata->setMaxDepth($data['max_depth']);
                 }
             }
         }
         return true;
     }
     return false;
 }
Ejemplo n.º 5
0
 /**
  * {@inheritdoc}
  */
 public function loadClassMetadata(ClassMetadataInterface $classMetadata)
 {
     if (null === $this->classes) {
         if (!stream_is_local($this->file)) {
             throw new MappingException(sprintf('This is not a local file "%s".', $this->file));
         }
         if (null === $this->yamlParser) {
             $this->yamlParser = new Parser();
         }
         $classes = $this->yamlParser->parse(file_get_contents($this->file));
         if (empty($classes)) {
             return false;
         }
         // not an array
         if (!is_array($classes)) {
             throw new MappingException(sprintf('The file "%s" must contain a YAML array.', $this->file));
         }
         $this->classes = $classes;
     }
     if (isset($this->classes[$classMetadata->getName()])) {
         $yaml = $this->classes[$classMetadata->getName()];
         if (isset($yaml['attributes']) && is_array($yaml['attributes'])) {
             $attributesMetadata = $classMetadata->getAttributesMetadata();
             foreach ($yaml['attributes'] as $attribute => $data) {
                 if (isset($attributesMetadata[$attribute])) {
                     $attributeMetadata = $attributesMetadata[$attribute];
                 } else {
                     $attributeMetadata = new AttributeMetadata($attribute);
                     $classMetadata->addAttributeMetadata($attributeMetadata);
                 }
                 if (isset($data['groups'])) {
                     foreach ($data['groups'] as $group) {
                         $attributeMetadata->addGroup($group);
                     }
                 }
             }
         }
         return true;
     }
     return false;
 }
Ejemplo n.º 6
0
 /**
  * {@inheritdoc}
  */
 public function loadClassMetadata(ClassMetadataInterface $classMetadata)
 {
     if (null === $this->classes) {
         $this->classes = $this->getClassesFromYaml();
     }
     if (!$this->classes) {
         return false;
     }
     if (isset($this->classes[$classMetadata->getName()])) {
         $yaml = $this->classes[$classMetadata->getName()];
         if (isset($yaml['attributes']) && is_array($yaml['attributes'])) {
             $attributesMetadata = $classMetadata->getAttributesMetadata();
             foreach ($yaml['attributes'] as $attribute => $data) {
                 if (isset($attributesMetadata[$attribute])) {
                     $attributeMetadata = $attributesMetadata[$attribute];
                 } else {
                     $attributeMetadata = new AttributeMetadata($attribute);
                     $classMetadata->addAttributeMetadata($attributeMetadata);
                 }
                 if (isset($data['groups'])) {
                     if (!is_array($data['groups'])) {
                         throw new MappingException('The "groups" key must be an array of strings in "%s" for the attribute "%s" of the class "%s".', $this->file, $attribute, $classMetadata->getName());
                     }
                     foreach ($data['groups'] as $group) {
                         if (!is_string($group)) {
                             throw new MappingException('Group names must be strings in "%s" for the attribute "%s" of the class "%s".', $this->file, $attribute, $classMetadata->getName());
                         }
                         $attributeMetadata->addGroup($group);
                     }
                 }
                 if (isset($data['max_depth'])) {
                     if (!is_int($data['max_depth'])) {
                         throw new MappingException('The "max_depth" value must an integer  in "%s" for the attribute "%s" of the class "%s".', $this->file, $attribute, $classMetadata->getName());
                     }
                     $attributeMetadata->setMaxDepth($data['max_depth']);
                 }
             }
         }
         return true;
     }
     return false;
 }