xref: /plugin/combo/ComboStrap/Meta/Api/MetadataStoreAbs.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
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