/** * Sets the entity attribute metadata from the metadata mapping. * * @param Metadata\Interfaces\AttributeInterface $metadata * @param array $attrMapping * @return Metadata\EntityMetadata */ protected function setAttributes(Metadata\Interfaces\AttributeInterface $metadata, array $attrMapping) { foreach ($attrMapping as $key => $mapping) { if (!is_array($mapping)) { $mapping = ['type' => null]; } if (!isset($mapping['type'])) { $mapping['type'] = null; } if (!isset($mapping['search'])) { $mapping['search'] = []; } $attribute = new Metadata\AttributeMetadata($key, $mapping['type'], $this->isMixin($metadata)); if (isset($mapping['description'])) { $attribute->description = $mapping['description']; } if (isset($mapping['defaultValue'])) { $attribute->defaultValue = $mapping['defaultValue']; } if (isset($mapping['calculated']) && is_array($mapping['calculated'])) { $calculated = $mapping['calculated']; if (isset($calculated['class']) && isset($calculated['method'])) { $attribute->calculated['class'] = $calculated['class']; $attribute->calculated['method'] = $calculated['method']; } } if (isset($mapping['search']['autocomplete'])) { $attribute->setAutocomplete(true); } else { if (isset($mapping['search']['store'])) { $attribute->setSearchProperty(true); } } if (isset($mapping['save'])) { $attribute->enableSave($mapping['save']); } if (isset($mapping['serialize'])) { $attribute->enableSerialize($mapping['serialize']); } $metadata->addAttribute($attribute); } return $metadata; }