19 declare(strict_types=1);
49 ResourceBuilder $resource_builder,
51 RepositoryPreloader $preloader,
52 private Subject $events
64 ?
string $collection_identification = null,
66 ): ResourceCollectionIdentification {
67 if ($collection_identification === null
68 || $collection_identification ===
'' 69 || !$this->collection_builder->has(
new ResourceCollectionIdentification($collection_identification))
71 $collection = $this->collection_builder->new($owner);
72 $identification = $collection->getIdentification();
73 $this->cache[$identification->serialize()] = $collection;
75 return $identification;
78 return new ResourceCollectionIdentification($collection_identification);
81 public function exists(
string $collection_identification): bool
83 return $this->collection_builder->has(
new ResourceCollectionIdentification($collection_identification));
87 ?
string $collection_identification = null,
89 ): ?ResourceCollectionIdentification {
90 if ($this->
exists($collection_identification)) {
91 return $this->
id($collection_identification, $owner);
97 ResourceCollectionIdentification $identification,
100 $rcid = $identification->serialize();
102 $collection = $this->cache[$rcid] ?? $this->collection_builder->get(
109 $rids = isset($this->cache[$rcid])
111 : $this->rid_cache[$rcid]
112 ?? iterator_to_array($this->collection_builder->getResourceIds($identification));
114 $this->rid_cache[$rcid] = [];
115 $collection->clear();
117 foreach ($rids as $resource_identification) {
118 if ($this->resource_builder->has($resource_identification)) {
119 $collection->add($resource_identification);
120 $preload[] = $resource_identification;
122 $this->rid_cache[$rcid][] = $resource_identification;
124 $this->preloader->preload($preload);
126 return $this->cache[$rcid] = $collection;
133 return $this->collection_builder->store($collection);
136 public function clone(ResourceCollectionIdentification $source_collection_id): ResourceCollectionIdentification
138 $target_collection_id = $this->
id();
139 $target_collection = $this->
get($target_collection_id);
140 $source_collection = $this->
get($source_collection_id);
142 foreach ($source_collection->getResourceIdentifications() as $identification) {
143 $resource = $this->resource_builder->get($identification);
144 $cloned_resource = $this->resource_builder->clone($resource);
145 $target_collection->add($cloned_resource->getIdentification());
147 $this->
store($target_collection);
149 return $target_collection_id;
152 public function remove(
153 ResourceCollectionIdentification $collection_id,
154 ResourceStakeholder $stakeholder,
155 bool $delete_resources_as_well = false
157 $collection = $this->
get($collection_id);
158 if ($delete_resources_as_well) {
159 foreach ($collection->getResourceIdentifications() as $resource_identification) {
160 $resource = $this->resource_builder->get($resource_identification);
161 $this->resource_builder->remove($resource, $stakeholder);
164 unset($this->cache[$collection_id->serialize()]);
166 return $this->collection_builder->delete($collection_id);
176 if ($position >= $from && $position < $from + $amout) {
177 $return[] = $identification;
189 if ($position >= $from && $position <= $to) {
190 yield $identification;
198 $this->resource_builder,
199 $this->collection_builder,
store(ResourceCollection $collection)
clone(ResourceCollectionIdentification $source_collection_id)
Class ResourceCollection.
rangeAsGenerator(ResourceCollection $collection, int $from, int $to)
__construct(ResourceBuilder $resource_builder, CollectionBuilder $collection_builder, RepositoryPreloader $preloader, private Subject $events)
Consumers constructor.
idOrNull(?string $collection_identification=null, ?int $owner=null)
ResourceBuilder $resource_builder
rangeAsArray(ResourceCollection $collection, int $from, int $amout)
CollectionBuilder $collection_builder
getResourceIdentifications()
sort(ResourceCollection $collection)
id(?string $collection_identification=null, ?int $owner=null)
RepositoryPreloader $preloader
exists(string $collection_identification)