addStatements(MetadataStatement::createFromString($statement)); } $this->dispatcher = new NullEventDispatcher(); } public function setEventDispatcher(EventDispatcherInterface $eventDispatcher): void { $this->dispatcher = $eventDispatcher; } public static function create(string ...$statements): self { return new self(...$statements); } public function addStatements(MetadataStatement ...$statements): self { foreach ($statements as $statement) { $aaguid = $statement->getAaguid(); if ($aaguid === null) { continue; } $this->statements[$aaguid] = $statement; } return $this; } public function list(): iterable { yield from array_keys($this->statements); } public function has(string $aaguid): bool { return array_key_exists($aaguid, $this->statements); } public function get(string $aaguid): MetadataStatement { array_key_exists($aaguid, $this->statements) || throw MissingMetadataStatementException::create($aaguid); $mds = $this->statements[$aaguid]; $this->dispatcher->dispatch(MetadataStatementFound::create($mds)); return $mds; } }