Passed
Push — main ( 31c7e7...eeec55 )
by Greg
06:50
created

Registry::elementFactory()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 3
c 0
b 0
f 0
nc 2
nop 1
dl 0
loc 7
rs 10
1
<?php
2
3
/**
4
 * webtrees: online genealogy
5
 * Copyright (C) 2022 webtrees development team
6
 * This program is free software: you can redistribute it and/or modify
7
 * it under the terms of the GNU General Public License as published by
8
 * the Free Software Foundation, either version 3 of the License, or
9
 * (at your option) any later version.
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
 * GNU General Public License for more details.
14
 * You should have received a copy of the GNU General Public License
15
 * along with this program. If not, see <https://www.gnu.org/licenses/>.
16
 */
17
18
declare(strict_types=1);
19
20
namespace Fisharebest\Webtrees;
21
22
use Fisharebest\Webtrees\Contracts\CacheFactoryInterface;
23
use Fisharebest\Webtrees\Contracts\CalendarDateFactoryInterface;
24
use Fisharebest\Webtrees\Contracts\EncodingFactoryInterface;
25
use Fisharebest\Webtrees\Contracts\FamilyFactoryInterface;
26
use Fisharebest\Webtrees\Contracts\FilesystemFactoryInterface;
27
use Fisharebest\Webtrees\Contracts\ElementFactoryInterface;
28
use Fisharebest\Webtrees\Contracts\GedcomRecordFactoryInterface;
29
use Fisharebest\Webtrees\Contracts\HeaderFactoryInterface;
30
use Fisharebest\Webtrees\Contracts\ImageFactoryInterface;
31
use Fisharebest\Webtrees\Contracts\IndividualFactoryInterface;
32
use Fisharebest\Webtrees\Contracts\LocationFactoryInterface;
33
use Fisharebest\Webtrees\Contracts\MarkdownFactoryInterface;
34
use Fisharebest\Webtrees\Contracts\MediaFactoryInterface;
35
use Fisharebest\Webtrees\Contracts\NoteFactoryInterface;
36
use Fisharebest\Webtrees\Contracts\RepositoryFactoryInterface;
37
use Fisharebest\Webtrees\Contracts\ResponseFactoryInterface;
38
use Fisharebest\Webtrees\Contracts\RouteFactoryInterface;
39
use Fisharebest\Webtrees\Contracts\SharedNoteFactoryInterface;
40
use Fisharebest\Webtrees\Contracts\SlugFactoryInterface;
41
use Fisharebest\Webtrees\Contracts\SourceFactoryInterface;
42
use Fisharebest\Webtrees\Contracts\SubmissionFactoryInterface;
43
use Fisharebest\Webtrees\Contracts\SubmitterFactoryInterface;
44
use Fisharebest\Webtrees\Contracts\SurnameTraditionFactoryInterface;
45
use Fisharebest\Webtrees\Contracts\TimeFactoryInterface;
46
use Fisharebest\Webtrees\Contracts\TimestampFactoryInterface;
47
use Fisharebest\Webtrees\Contracts\IdFactoryInterface;
48
use Fisharebest\Webtrees\Contracts\XrefFactoryInterface;
49
50
/**
51
 * Provide access to factory objects and those that represent external entities (filesystems, caches)
52
 */
53
class Registry
54
{
55
    private static CacheFactoryInterface $cache_factory;
56
57
    private static CalendarDateFactoryInterface $calendar_date_factory;
58
59
    private static ElementFactoryInterface $element_factory;
60
61
    private static EncodingFactoryInterface $encoding_factory;
62
63
    private static FamilyFactoryInterface $family_factory;
64
65
    private static FilesystemFactoryInterface $filesystem_factory;
66
67
    private static GedcomRecordFactoryInterface $gedcom_record_factory;
68
69
    private static HeaderFactoryInterface $header_factory;
70
71
    private static IdFactoryInterface $id_factory;
72
73
    private static ImageFactoryInterface $image_factory;
74
75
    private static IndividualFactoryInterface $individual_factory;
76
77
    private static LocationFactoryInterface $location_factory;
78
79
    private static MarkdownFactoryInterface $markdown_factory;
80
81
    private static MediaFactoryInterface $media_factory;
82
83
    private static NoteFactoryInterface $note_factory;
84
85
    private static RepositoryFactoryInterface $repository_factory;
86
87
    private static ResponseFactoryInterface $response_factory;
88
89
    private static RouteFactoryInterface $route_factory;
90
91
    private static SharedNoteFactoryInterface $shared_note_factory;
92
93
    private static SlugFactoryInterface $slug_factory;
94
95
    private static SourceFactoryInterface $source_factory;
96
97
    private static SubmissionFactoryInterface $submission_factory;
98
99
    private static SubmitterFactoryInterface $submitter_factory;
100
101
    private static SurnameTraditionFactoryInterface $surname_tradition_factory;
102
103
    private static TimeFactoryInterface $time_factory;
104
105
    private static TimestampFactoryInterface $timestamp_factory;
106
107
    private static XrefFactoryInterface $xref_factory;
108
109
    /**
110
     * Store or retrieve a factory object.
111
     *
112
     * @param CacheFactoryInterface|null $factory
113
     *
114
     * @return CacheFactoryInterface
115
     */
116
    public static function cache(CacheFactoryInterface $factory = null): CacheFactoryInterface
117
    {
118
        if ($factory instanceof CacheFactoryInterface) {
119
            self::$cache_factory = $factory;
120
        }
121
122
        return self::$cache_factory;
123
    }
124
125
    /**
126
     * Store or retrieve a factory object.
127
     *
128
     * @param CalendarDateFactoryInterface|null $factory
129
     *
130
     * @return CalendarDateFactoryInterface
131
     */
132
    public static function calendarDateFactory(CalendarDateFactoryInterface $factory = null): CalendarDateFactoryInterface
133
    {
134
        if ($factory instanceof CalendarDateFactoryInterface) {
135
            self::$calendar_date_factory = $factory;
136
        }
137
138
        return self::$calendar_date_factory;
139
    }
140
141
    /**
142
     * Store or retrieve a factory object.
143
     *
144
     * @param ElementFactoryInterface|null $factory
145
     *
146
     * @return ElementFactoryInterface
147
     */
148
    public static function elementFactory(ElementFactoryInterface $factory = null): ElementFactoryInterface
149
    {
150
        if ($factory instanceof ElementFactoryInterface) {
151
            self::$element_factory = $factory;
152
        }
153
154
        return self::$element_factory;
155
    }
156
157
    /**
158
     * Store or retrieve a factory object.
159
     *
160
     * @param EncodingFactoryInterface|null $factory
161
     *
162
     * @return EncodingFactoryInterface
163
     */
164
    public static function encodingFactory(EncodingFactoryInterface $factory = null): EncodingFactoryInterface
165
    {
166
        if ($factory instanceof EncodingFactoryInterface) {
167
            self::$encoding_factory = $factory;
168
        }
169
170
        return self::$encoding_factory;
171
    }
172
173
    /**
174
     * Store or retrieve a factory object.
175
     *
176
     * @param FamilyFactoryInterface|null $factory
177
     *
178
     * @return FamilyFactoryInterface
179
     */
180
    public static function familyFactory(FamilyFactoryInterface $factory = null): FamilyFactoryInterface
181
    {
182
        if ($factory instanceof FamilyFactoryInterface) {
183
            self::$family_factory = $factory;
184
        }
185
186
        return self::$family_factory;
187
    }
188
189
    /**
190
     * Store or retrieve a factory object.
191
     *
192
     * @param FilesystemFactoryInterface|null $factory
193
     *
194
     * @return FilesystemFactoryInterface
195
     */
196
    public static function filesystem(FilesystemFactoryInterface $factory = null): FilesystemFactoryInterface
197
    {
198
        if ($factory instanceof FilesystemFactoryInterface) {
199
            self::$filesystem_factory = $factory;
200
        }
201
202
        return self::$filesystem_factory;
203
    }
204
205
    /**
206
     * Store or retrieve a factory object.
207
     *
208
     * @param GedcomRecordFactoryInterface|null $factory
209
     *
210
     * @return GedcomRecordFactoryInterface
211
     */
212
    public static function gedcomRecordFactory(GedcomRecordFactoryInterface $factory = null): GedcomRecordFactoryInterface
213
    {
214
        if ($factory instanceof GedcomRecordFactoryInterface) {
215
            self::$gedcom_record_factory = $factory;
216
        }
217
218
        return self::$gedcom_record_factory;
219
    }
220
221
    /**
222
     * Store or retrieve a factory object.
223
     *
224
     * @param HeaderFactoryInterface|null $factory
225
     *
226
     * @return HeaderFactoryInterface
227
     */
228
    public static function headerFactory(HeaderFactoryInterface $factory = null): HeaderFactoryInterface
229
    {
230
        if ($factory instanceof HeaderFactoryInterface) {
231
            self::$header_factory = $factory;
232
        }
233
234
        return self::$header_factory;
235
    }
236
237
    /**
238
     * Store or retrieve a factory object.
239
     *
240
     * @param IdFactoryInterface|null $factory
241
     *
242
     * @return IdFactoryInterface
243
     */
244
    public static function idFactory(IdFactoryInterface $factory = null): IdFactoryInterface
245
    {
246
        if ($factory instanceof IdFactoryInterface) {
247
            self::$id_factory = $factory;
248
        }
249
250
        return self::$id_factory;
251
    }
252
253
    /**
254
     * Store or retrieve a factory object.
255
     *
256
     * @param ImageFactoryInterface|null $factory
257
     *
258
     * @return ImageFactoryInterface
259
     */
260
    public static function imageFactory(ImageFactoryInterface $factory = null): ImageFactoryInterface
261
    {
262
        if ($factory instanceof ImageFactoryInterface) {
263
            self::$image_factory = $factory;
264
        }
265
266
        return self::$image_factory;
267
    }
268
269
    /**
270
     * Store or retrieve a factory object.
271
     *
272
     * @param IndividualFactoryInterface|null $factory
273
     *
274
     * @return IndividualFactoryInterface
275
     */
276
    public static function individualFactory(IndividualFactoryInterface $factory = null): IndividualFactoryInterface
277
    {
278
        if ($factory instanceof IndividualFactoryInterface) {
279
            self::$individual_factory = $factory;
280
        }
281
282
        return self::$individual_factory;
283
    }
284
285
    /**
286
     * Store or retrieve a factory object.
287
     *
288
     * @param LocationFactoryInterface|null $factory
289
     *
290
     * @return LocationFactoryInterface
291
     */
292
    public static function locationFactory(LocationFactoryInterface $factory = null): LocationFactoryInterface
293
    {
294
        if ($factory instanceof LocationFactoryInterface) {
295
            self::$location_factory = $factory;
296
        }
297
298
        return self::$location_factory;
299
    }
300
301
    /**
302
     * Store or retrieve a factory object.
303
     *
304
     * @param MarkdownFactoryInterface|null $factory
305
     *
306
     * @return MarkdownFactoryInterface
307
     */
308
    public static function markdownFactory(MarkdownFactoryInterface $factory = null): MarkdownFactoryInterface
309
    {
310
        if ($factory instanceof MarkdownFactoryInterface) {
311
            self::$markdown_factory = $factory;
312
        }
313
314
        return self::$markdown_factory;
315
    }
316
317
    /**
318
     * Store or retrieve a factory object.
319
     *
320
     * @param MediaFactoryInterface|null $factory
321
     *
322
     * @return MediaFactoryInterface
323
     */
324
    public static function mediaFactory(MediaFactoryInterface $factory = null): MediaFactoryInterface
325
    {
326
        if ($factory instanceof MediaFactoryInterface) {
327
            self::$media_factory = $factory;
328
        }
329
330
        return self::$media_factory;
331
    }
332
333
    /**
334
     * Store or retrieve a factory object.
335
     *
336
     * @param NoteFactoryInterface|null $factory
337
     *
338
     * @return NoteFactoryInterface
339
     */
340
    public static function noteFactory(NoteFactoryInterface $factory = null): NoteFactoryInterface
341
    {
342
        if ($factory instanceof NoteFactoryInterface) {
343
            self::$note_factory = $factory;
344
        }
345
346
        return self::$note_factory;
347
    }
348
349
    /**
350
     * Store or retrieve a factory object.
351
     *
352
     * @param RepositoryFactoryInterface|null $factory
353
     *
354
     * @return RepositoryFactoryInterface
355
     */
356
    public static function repositoryFactory(RepositoryFactoryInterface $factory = null): RepositoryFactoryInterface
357
    {
358
        if ($factory instanceof RepositoryFactoryInterface) {
359
            self::$repository_factory = $factory;
360
        }
361
362
        return self::$repository_factory;
363
    }
364
365
    /**
366
     * Store or retrieve a factory object.
367
     *
368
     * @param ResponseFactoryInterface|null $factory
369
     *
370
     * @return ResponseFactoryInterface
371
     */
372
    public static function responseFactory(ResponseFactoryInterface $factory = null): ResponseFactoryInterface
373
    {
374
        if ($factory instanceof ResponseFactoryInterface) {
375
            self::$response_factory = $factory;
376
        }
377
378
        return self::$response_factory;
379
    }
380
381
    /**
382
     * Store or retrieve a factory object.
383
     *
384
     * @param RouteFactoryInterface|null $factory
385
     *
386
     * @return RouteFactoryInterface
387
     */
388
    public static function routeFactory(RouteFactoryInterface $factory = null): RouteFactoryInterface
389
    {
390
        if ($factory instanceof RouteFactoryInterface) {
391
            self::$route_factory = $factory;
392
        }
393
394
        return self::$route_factory;
395
    }
396
397
    /**
398
     * Store or retrieve a factory object.
399
     *
400
     * @param SharedNoteFactoryInterface|null $factory
401
     *
402
     * @return SharedNoteFactoryInterface
403
     */
404
    public static function sharedNoteFactory(SharedNoteFactoryInterface $factory = null): SharedNoteFactoryInterface
405
    {
406
        if ($factory instanceof SharedNoteFactoryInterface) {
407
            self::$shared_note_factory = $factory;
408
        }
409
410
        return self::$shared_note_factory;
411
    }
412
413
    /**
414
     * Store or retrieve a factory object.
415
     *
416
     * @param SlugFactoryInterface|null $factory
417
     *
418
     * @return SlugFactoryInterface
419
     */
420
    public static function slugFactory(SlugFactoryInterface $factory = null): SlugFactoryInterface
421
    {
422
        if ($factory instanceof SlugFactoryInterface) {
423
            self::$slug_factory = $factory;
424
        }
425
426
        return self::$slug_factory;
427
    }
428
429
    /**
430
     * Store or retrieve a factory object.
431
     *
432
     * @param SourceFactoryInterface|null $factory
433
     *
434
     * @return SourceFactoryInterface
435
     */
436
    public static function sourceFactory(SourceFactoryInterface $factory = null): SourceFactoryInterface
437
    {
438
        if ($factory instanceof SourceFactoryInterface) {
439
            self::$source_factory = $factory;
440
        }
441
442
        return self::$source_factory;
443
    }
444
445
    /**
446
     * Store or retrieve a factory object.
447
     *
448
     * @param SubmissionFactoryInterface|null $factory
449
     *
450
     * @return SubmissionFactoryInterface
451
     */
452
    public static function submissionFactory(SubmissionFactoryInterface $factory = null): SubmissionFactoryInterface
453
    {
454
        if ($factory instanceof SubmissionFactoryInterface) {
455
            self::$submission_factory = $factory;
456
        }
457
458
        return self::$submission_factory;
459
    }
460
461
    /**
462
     * Store or retrieve a factory object.
463
     *
464
     * @param SubmitterFactoryInterface|null $factory
465
     *
466
     * @return SubmitterFactoryInterface
467
     */
468
    public static function submitterFactory(SubmitterFactoryInterface $factory = null): SubmitterFactoryInterface
469
    {
470
        if ($factory instanceof SubmitterFactoryInterface) {
471
            self::$submitter_factory = $factory;
472
        }
473
474
        return self::$submitter_factory;
475
    }
476
477
    /**
478
     * Store or retrieve a factory object.
479
     *
480
     * @param SurnameTraditionFactoryInterface|null $factory
481
     *
482
     * @return SurnameTraditionFactoryInterface
483
     */
484
    public static function surnameTraditionFactory(SurnameTraditionFactoryInterface $factory = null): SurnameTraditionFactoryInterface
485
    {
486
        if ($factory instanceof SurnameTraditionFactoryInterface) {
487
            self::$surname_tradition_factory = $factory;
488
        }
489
490
        return self::$surname_tradition_factory;
491
    }
492
493
    /**
494
     * Store or retrieve a factory object.
495
     *
496
     * @param TimeFactoryInterface|null $factory
497
     *
498
     * @return TimeFactoryInterface
499
     */
500
    public static function timeFactory(TimeFactoryInterface $factory = null): TimeFactoryInterface
501
    {
502
        if ($factory instanceof TimeFactoryInterface) {
503
            self::$time_factory = $factory;
504
        }
505
506
        return self::$time_factory;
507
    }
508
509
    /**
510
     * Store or retrieve a factory object.
511
     *
512
     * @param TimestampFactoryInterface|null $factory
513
     *
514
     * @return TimestampFactoryInterface
515
     */
516
    public static function timestampFactory(TimestampFactoryInterface $factory = null): TimestampFactoryInterface
517
    {
518
        if ($factory instanceof TimestampFactoryInterface) {
519
            self::$timestamp_factory = $factory;
520
        }
521
522
        return self::$timestamp_factory;
523
    }
524
525
    /**
526
     * Store or retrieve a factory object.
527
     *
528
     * @param XrefFactoryInterface|null $factory
529
     *
530
     * @return XrefFactoryInterface
531
     */
532
    public static function xrefFactory(XrefFactoryInterface $factory = null): XrefFactoryInterface
533
    {
534
        if ($factory instanceof XrefFactoryInterface) {
535
            self::$xref_factory = $factory;
536
        }
537
538
        return self::$xref_factory;
539
    }
540
}
541