public function parse(array $data, ParsingDispatcher $parsingDispatcher)
{
if (!array_key_exists('module', $data)) {
throw new Exceptions\Parser("Missing 'module' attribute for PolicyCreate.");
}
if (!array_key_exists('function', $data)) {
throw new Exceptions\Parser("Missing 'function' attribute for PolicyCreate.");
}
$policyCreate = $this->roleService->newPolicyCreateStruct($data['module'], $data['function']);
// @todo XSD says that limitations is mandatory,
// but polices can be created without limitations
if (array_key_exists('limitations', $data)) {
if (!is_array($data['limitations'])) {
throw new Exceptions\Parser("Invalid format for 'limitations' in PolicyCreate.");
}
if (!isset($data['limitations']['limitation']) || !is_array($data['limitations']['limitation'])) {
throw new Exceptions\Parser("Invalid format for 'limitations' in PolicyCreate.");
}
foreach ($data['limitations']['limitation'] as $limitationData) {
$policyCreate->addLimitation($this->parserTools->parseLimitation($limitationData));
}
}
return $policyCreate;
}