public function visit(Visitor $visitor, Generator $generator, $data)
{
$generator->startObjectElement('Policy');
$visitor->setHeader('Content-Type', $generator->getMediaType($data instanceof PolicyDraft ? 'PolicyDraft' : 'Policy'));
$visitor->setHeader('Accept-Patch', $generator->getMediaType('PolicyUpdate'));
$generator->startAttribute('href', $this->router->generate('ezpublish_rest_loadPolicy', array('roleId' => $data->roleId, 'policyId' => $data->id)));
$generator->endAttribute('href');
$generator->startValueElement('id', $data->id);
$generator->endValueElement('id');
if ($data instanceof PolicyDraft) {
$generator->startValueElement('originalId', $data->originalId);
$generator->endValueElement('originalId');
}
$generator->startValueElement('module', $data->module);
$generator->endValueElement('module');
$generator->startValueElement('function', $data->function);
$generator->endValueElement('function');
$limitations = $data->getLimitations();
if (!empty($limitations)) {
$generator->startHashElement('limitations');
$generator->startList('limitation');
foreach ($limitations as $limitation) {
$this->visitLimitation($generator, $limitation);
}
$generator->endList('limitation');
$generator->endHashElement('limitations');
}
$generator->endObjectElement('Policy');
}