1*04fd306cSNickeau<?php 2*04fd306cSNickeau 3*04fd306cSNickeau 4*04fd306cSNickeaunamespace ComboStrap\Meta\Api; 5*04fd306cSNickeau 6*04fd306cSNickeau 7*04fd306cSNickeauuse ComboStrap\ExceptionRuntime; 8*04fd306cSNickeauuse ComboStrap\Meta\Store\MetadataDokuWikiStore; 9*04fd306cSNickeauuse ComboStrap\MetadataDokuWikiArrayStore; 10*04fd306cSNickeauuse ComboStrap\ResourceCombo; 11*04fd306cSNickeau 12*04fd306cSNickeauabstract class MetadataStoreAbs implements MetadataStore 13*04fd306cSNickeau{ 14*04fd306cSNickeau 15*04fd306cSNickeau const CANONICAL = "store"; 16*04fd306cSNickeau private $page; 17*04fd306cSNickeau 18*04fd306cSNickeau 19*04fd306cSNickeau public function isDokuWikiStore(): bool 20*04fd306cSNickeau { 21*04fd306cSNickeau return $this instanceof MetadataDokuWikiStore || $this instanceof MetadataDokuWikiArrayStore; 22*04fd306cSNickeau } 23*04fd306cSNickeau 24*04fd306cSNickeau /** 25*04fd306cSNickeau * MetadataFormStore constructor. 26*04fd306cSNickeau * @param ResourceCombo $page 27*04fd306cSNickeau */ 28*04fd306cSNickeau public function __construct(ResourceCombo $page) 29*04fd306cSNickeau { 30*04fd306cSNickeau $this->page = $page; 31*04fd306cSNickeau } 32*04fd306cSNickeau 33*04fd306cSNickeau protected function checkResource(ResourceCombo $requestedResource) 34*04fd306cSNickeau { 35*04fd306cSNickeau if ($this->page->getPathObject()->toAbsoluteId() !== $requestedResource->getPathObject()->toAbsoluteId()) { 36*04fd306cSNickeau throw new ExceptionRuntime("The page ($requestedResource) is unknown. We got data for the page ($this->page)", $this->getCanonical()); 37*04fd306cSNickeau } 38*04fd306cSNickeau } 39*04fd306cSNickeau 40*04fd306cSNickeau /** 41*04fd306cSNickeau * @param MetadataStore|string $readStore 42*04fd306cSNickeau * @param $resource 43*04fd306cSNickeau * @return MetadataStore 44*04fd306cSNickeau */ 45*04fd306cSNickeau public static function toMetadataStore($readStore, $resource): MetadataStore 46*04fd306cSNickeau { 47*04fd306cSNickeau if ($readStore instanceof MetadataStore) { 48*04fd306cSNickeau return $readStore; 49*04fd306cSNickeau } 50*04fd306cSNickeau if (!is_string($readStore)) { 51*04fd306cSNickeau throw new ExceptionRuntime("The class value is not a string", MetadataStoreAbs::CANONICAL); 52*04fd306cSNickeau } 53*04fd306cSNickeau if (!is_subclass_of($readStore, MetadataStore::class)) { 54*04fd306cSNickeau throw new ExceptionRuntime("The value ($readStore) is not a subclass of a store."); 55*04fd306cSNickeau } 56*04fd306cSNickeau if ($resource === null) { 57*04fd306cSNickeau throw new ExceptionRuntime("The resource is null. You can't implement a store without a resource."); 58*04fd306cSNickeau } 59*04fd306cSNickeau return $readStore::getOrCreateFromResource($resource); 60*04fd306cSNickeau 61*04fd306cSNickeau } 62*04fd306cSNickeau 63*04fd306cSNickeau public function getResource(): ResourceCombo 64*04fd306cSNickeau { 65*04fd306cSNickeau return $this->page; 66*04fd306cSNickeau } 67*04fd306cSNickeau 68*04fd306cSNickeau public function getCanonical(): string 69*04fd306cSNickeau { 70*04fd306cSNickeau return self::CANONICAL; 71*04fd306cSNickeau } 72*04fd306cSNickeau 73*04fd306cSNickeau public function __toString() 74*04fd306cSNickeau { 75*04fd306cSNickeau return get_class($this); 76*04fd306cSNickeau } 77*04fd306cSNickeau 78*04fd306cSNickeau 79*04fd306cSNickeau} 80