/** * Document the properties and methods associated to a class * * @param ClassMetadata $metadata The class definition * @param ReflectionClass $class The class whose properties and * methods should be documented. */ private function documentProperties(ClassMetadata $metadata, ReflectionClass $class) { /* $interfaces = $class->getInterfaces(); $linkRelationMethods = array(); foreach ($interfaces as $interface) { if (null !== $this->getAnnotation($interface, $linkRelationAnnot)) { if (false === isset($documentation['rels'][$interface->name])) { $documentation['rels'][$interface->name] = array(); foreach ($interface->getMethods() as $method) { if ($method->isPublic()) { $documentation['rels'][$interface->name][$method->name] = $interface->name; } } } $linkRelationMethods += $documentation['rels'][$interface->name]; } } */ $properties = array(); $elements = array_merge($class->getProperties(), $class->getMethods()); foreach ($elements as $element) { $annotation = $this->getAnnotation($element, 'ML\\HydraBundle\\Mapping\\Expose'); if (null === $annotation) { continue; } // $exposeAs = $element->name; // if ($annotation->as) { // $exposeAs = $annotation->as; // if ($annotation->getIri()) { // $property['iri'] = $annotation->getIri(); // } else { // $property['iri'] = $exposeClassAs . '/' . $exposeAs; // } // } else { // $exposeAs = $this->propertirize($exposeAs); // if ($annotation->getIri()) { // $property['iri'] = $annotation->getIri(); // } else { // $property['iri'] = $this->camelize($exposeAs); // $property['iri'][0] = strtolower($property['iri'][0]); // $property['iri'] = $exposeClassAs . '/' . $property['iri']; // } // } $property = new PropertyDefinition($class->name, $element->name); $property->setExposeAs($annotation->as); $property->setIri($annotation->getIri()); if (null !== $annotation->required) { $property->setRequired($annotation->required); } if (null !== $annotation->readonly) { $property->setReadOnly($annotation->readonly); } if (null !== $annotation->writeonly) { $property->setWriteOnly($annotation->writeonly); } $tmp = $this->getDocBlockText($element); $property->setTitle($tmp['title']); $property->setDescription($tmp['description']); $tmp = $this->getType($element); $property->setType($tmp['type']); $this->documentRouteAndOperations($property, $element); if (null !== ($annotation = $this->getAnnotation($element, 'ML\\HydraBundle\\Mapping\\Collection'))) { // TODO Check for conflicting routes!? // TODO Check that the IRI template can be filled!? $property->setRoute($this->getRouteMetadata($annotation->route)); if (false === $property->supportsOperation($annotation->route)) { $property->addOperation($this->getRouteMetadata($annotation->route)); } $property->setType('ML\\HydraBundle\\Entity\\Collection'); $property->setReadOnly(true); } /* if ($element instanceof ReflectionMethod) { if (array_key_exists($element->name, $linkRelationMethods)) { $property['original_type'] .= ' --- ' . $linkRelationMethods[$element->name] . '::' . $element->name; } } */ // TODO Validate definition, this here isn't the right place to do so, create a metadata factory $properties[] = $property; } // $documentation['class2type'][$class->name] = $exposeClassAs; // $documentation['types'][$exposeClassAs] = $result; $metadata->setProperties($properties); }