Passed
Push — develop ( f3d484...e21e10 )
by Greg
06:29
created

Registry::submitterFactory()   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
nc 2
nop 1
dl 0
loc 7
rs 10
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * webtrees: online genealogy
5
 * Copyright (C) 2021 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\SlugFactoryInterface;
40
use Fisharebest\Webtrees\Contracts\SourceFactoryInterface;
41
use Fisharebest\Webtrees\Contracts\SubmissionFactoryInterface;
42
use Fisharebest\Webtrees\Contracts\SubmitterFactoryInterface;
43
use Fisharebest\Webtrees\Contracts\TimestampFactoryInterface;
44
use Fisharebest\Webtrees\Contracts\XrefFactoryInterface;
45
46
/**
47
 * Provide access to factory objects and those that represent external entities (filesystems, caches)
48
 */
49
class Registry
50
{
51
    private static CacheFactoryInterface $cache_factory;
52
53
    private static CalendarDateFactoryInterface $calendar_date_factory;
54
55
    private static ElementFactoryInterface $element_factory;
56
57
    private static EncodingFactoryInterface $encoding_factory;
58
59
    private static FamilyFactoryInterface $family_factory;
60
61
    private static FilesystemFactoryInterface $filesystem_factory;
62
63
    private static GedcomRecordFactoryInterface $gedcom_record_factory;
64
65
    private static HeaderFactoryInterface $header_factory;
66
67
    private static ImageFactoryInterface $image_factory;
68
69
    private static IndividualFactoryInterface $individual_factory;
70
71
    private static LocationFactoryInterface $location_factory;
72
73
    private static MarkdownFactoryInterface $markdown_factory;
74
75
    private static MediaFactoryInterface $media_factory;
76
77
    private static NoteFactoryInterface $note_factory;
78
79
    private static RepositoryFactoryInterface $repository_factory;
80
81
    private static ResponseFactoryInterface $response_factory;
82
83
    private static RouteFactoryInterface $route_factory;
84
85
    private static SlugFactoryInterface $slug_factory;
86
87
    private static SourceFactoryInterface $source_factory;
88
89
    private static SubmissionFactoryInterface $submission_factory;
90
91
    private static SubmitterFactoryInterface $submitter_factory;
92
93
    private static TimestampFactoryInterface $timestamp_factory;
94
95
    private static XrefFactoryInterface $xref_factory;
96
97
    /**
98
     * Store or retrieve a factory object.
99
     *
100
     * @param CacheFactoryInterface|null $factory
101
     *
102
     * @return CacheFactoryInterface
103
     */
104
    public static function cache(CacheFactoryInterface $factory = null): CacheFactoryInterface
105
    {
106
        if ($factory instanceof CacheFactoryInterface) {
107
            self::$cache_factory = $factory;
108
        }
109
110
        return self::$cache_factory;
111
    }
112
113
    /**
114
     * Store or retrieve a factory object.
115
     *
116
     * @param CalendarDateFactoryInterface|null $factory
117
     *
118
     * @return CalendarDateFactoryInterface
119
     */
120
    public static function calendarDateFactory(CalendarDateFactoryInterface $factory = null): CalendarDateFactoryInterface
121
    {
122
        if ($factory instanceof CalendarDateFactoryInterface) {
123
            self::$calendar_date_factory = $factory;
124
        }
125
126
        return self::$calendar_date_factory;
127
    }
128
129
    /**
130
     * Store or retrieve a factory object.
131
     *
132
     * @param ElementFactoryInterface|null $factory
133
     *
134
     * @return ElementFactoryInterface
135
     */
136
    public static function elementFactory(ElementFactoryInterface $factory = null): ElementFactoryInterface
137
    {
138
        if ($factory instanceof ElementFactoryInterface) {
139
            self::$element_factory = $factory;
140
        }
141
142
        return self::$element_factory;
143
    }
144
145
    /**
146
     * Store or retrieve a factory object.
147
     *
148
     * @param EncodingFactoryInterface|null $factory
149
     *
150
     * @return EncodingFactoryInterface
151
     */
152
    public static function encodingFactory(EncodingFactoryInterface $factory = null): EncodingFactoryInterface
153
    {
154
        if ($factory instanceof EncodingFactoryInterface) {
155
            self::$encoding_factory = $factory;
156
        }
157
158
        return self::$encoding_factory;
159
    }
160
161
    /**
162
     * Store or retrieve a factory object.
163
     *
164
     * @param FamilyFactoryInterface|null $factory
165
     *
166
     * @return FamilyFactoryInterface
167
     */
168
    public static function familyFactory(FamilyFactoryInterface $factory = null): FamilyFactoryInterface
169
    {
170
        if ($factory instanceof FamilyFactoryInterface) {
171
            self::$family_factory = $factory;
172
        }
173
174
        return self::$family_factory;
175
    }
176
177
    /**
178
     * Store or retrieve a factory object.
179
     *
180
     * @param FilesystemFactoryInterface|null $factory
181
     *
182
     * @return FilesystemFactoryInterface
183
     */
184
    public static function filesystem(FilesystemFactoryInterface $factory = null): FilesystemFactoryInterface
185
    {
186
        if ($factory instanceof FilesystemFactoryInterface) {
187
            self::$filesystem_factory = $factory;
188
        }
189
190
        return self::$filesystem_factory;
191
    }
192
193
    /**
194
     * Store or retrieve a factory object.
195
     *
196
     * @param GedcomRecordFactoryInterface|null $factory
197
     *
198
     * @return GedcomRecordFactoryInterface
199
     */
200
    public static function gedcomRecordFactory(GedcomRecordFactoryInterface $factory = null): GedcomRecordFactoryInterface
201
    {
202
        if ($factory instanceof GedcomRecordFactoryInterface) {
203
            self::$gedcom_record_factory = $factory;
204
        }
205
206
        return self::$gedcom_record_factory;
207
    }
208
209
    /**
210
     * Store or retrieve a factory object.
211
     *
212
     * @param HeaderFactoryInterface|null $factory
213
     *
214
     * @return HeaderFactoryInterface
215
     */
216
    public static function headerFactory(HeaderFactoryInterface $factory = null): HeaderFactoryInterface
217
    {
218
        if ($factory instanceof HeaderFactoryInterface) {
219
            self::$header_factory = $factory;
220
        }
221
222
        return self::$header_factory;
223
    }
224
225
    /**
226
     * Store or retrieve a factory object.
227
     *
228
     * @param ImageFactoryInterface|null $factory
229
     *
230
     * @return ImageFactoryInterface
231
     */
232
    public static function imageFactory(ImageFactoryInterface $factory = null): ImageFactoryInterface
233
    {
234
        if ($factory instanceof ImageFactoryInterface) {
235
            self::$image_factory = $factory;
236
        }
237
238
        return self::$image_factory;
239
    }
240
241
    /**
242
     * Store or retrieve a factory object.
243
     *
244
     * @param IndividualFactoryInterface|null $factory
245
     *
246
     * @return IndividualFactoryInterface
247
     */
248
    public static function individualFactory(IndividualFactoryInterface $factory = null): IndividualFactoryInterface
249
    {
250
        if ($factory instanceof IndividualFactoryInterface) {
251
            self::$individual_factory = $factory;
252
        }
253
254
        return self::$individual_factory;
255
    }
256
257
    /**
258
     * Store or retrieve a factory object.
259
     *
260
     * @param LocationFactoryInterface|null $factory
261
     *
262
     * @return LocationFactoryInterface
263
     */
264
    public static function locationFactory(LocationFactoryInterface $factory = null): LocationFactoryInterface
265
    {
266
        if ($factory instanceof LocationFactoryInterface) {
267
            self::$location_factory = $factory;
268
        }
269
270
        return self::$location_factory;
271
    }
272
273
    /**
274
     * Store or retrieve a factory object.
275
     *
276
     * @param MarkdownFactoryInterface|null $factory
277
     *
278
     * @return MarkdownFactoryInterface
279
     */
280
    public static function markdownFactory(MarkdownFactoryInterface $factory = null): MarkdownFactoryInterface
281
    {
282
        if ($factory instanceof MarkdownFactoryInterface) {
283
            self::$markdown_factory = $factory;
284
        }
285
286
        return self::$markdown_factory;
287
    }
288
289
    /**
290
     * Store or retrieve a factory object.
291
     *
292
     * @param MediaFactoryInterface|null $factory
293
     *
294
     * @return MediaFactoryInterface
295
     */
296
    public static function mediaFactory(MediaFactoryInterface $factory = null): MediaFactoryInterface
297
    {
298
        if ($factory instanceof MediaFactoryInterface) {
299
            self::$media_factory = $factory;
300
        }
301
302
        return self::$media_factory;
303
    }
304
305
    /**
306
     * Store or retrieve a factory object.
307
     *
308
     * @param NoteFactoryInterface|null $factory
309
     *
310
     * @return NoteFactoryInterface
311
     */
312
    public static function noteFactory(NoteFactoryInterface $factory = null): NoteFactoryInterface
313
    {
314
        if ($factory instanceof NoteFactoryInterface) {
315
            self::$note_factory = $factory;
316
        }
317
318
        return self::$note_factory;
319
    }
320
321
    /**
322
     * Store or retrieve a factory object.
323
     *
324
     * @param RepositoryFactoryInterface|null $factory
325
     *
326
     * @return RepositoryFactoryInterface
327
     */
328
    public static function repositoryFactory(RepositoryFactoryInterface $factory = null): RepositoryFactoryInterface
329
    {
330
        if ($factory instanceof RepositoryFactoryInterface) {
331
            self::$repository_factory = $factory;
332
        }
333
334
        return self::$repository_factory;
335
    }
336
337
    /**
338
     * Store or retrieve a factory object.
339
     *
340
     * @param ResponseFactoryInterface|null $factory
341
     *
342
     * @return ResponseFactoryInterface
343
     */
344
    public static function responseFactory(ResponseFactoryInterface $factory = null): ResponseFactoryInterface
345
    {
346
        if ($factory instanceof ResponseFactoryInterface) {
347
            self::$response_factory = $factory;
348
        }
349
350
        return self::$response_factory;
351
    }
352
353
    /**
354
     * Store or retrieve a factory object.
355
     *
356
     * @param RouteFactoryInterface|null $factory
357
     *
358
     * @return RouteFactoryInterface
359
     */
360
    public static function routeFactory(RouteFactoryInterface $factory = null): RouteFactoryInterface
361
    {
362
        if ($factory instanceof RouteFactoryInterface) {
363
            self::$route_factory = $factory;
364
        }
365
366
        return self::$route_factory;
367
    }
368
369
    /**
370
     * Store or retrieve a factory object.
371
     *
372
     * @param SlugFactoryInterface|null $factory
373
     *
374
     * @return SlugFactoryInterface
375
     */
376
    public static function slugFactory(SlugFactoryInterface $factory = null): SlugFactoryInterface
377
    {
378
        if ($factory instanceof SlugFactoryInterface) {
379
            self::$slug_factory = $factory;
380
        }
381
382
        return self::$slug_factory;
383
    }
384
385
    /**
386
     * Store or retrieve a factory object.
387
     *
388
     * @param SourceFactoryInterface|null $factory
389
     *
390
     * @return SourceFactoryInterface
391
     */
392
    public static function sourceFactory(SourceFactoryInterface $factory = null): SourceFactoryInterface
393
    {
394
        if ($factory instanceof SourceFactoryInterface) {
395
            self::$source_factory = $factory;
396
        }
397
398
        return self::$source_factory;
399
    }
400
401
    /**
402
     * Store or retrieve a factory object.
403
     *
404
     * @param SubmissionFactoryInterface|null $factory
405
     *
406
     * @return SubmissionFactoryInterface
407
     */
408
    public static function submissionFactory(SubmissionFactoryInterface $factory = null): SubmissionFactoryInterface
409
    {
410
        if ($factory instanceof SubmissionFactoryInterface) {
411
            self::$submission_factory = $factory;
412
        }
413
414
        return self::$submission_factory;
415
    }
416
417
    /**
418
     * Store or retrieve a factory object.
419
     *
420
     * @param SubmitterFactoryInterface|null $factory
421
     *
422
     * @return SubmitterFactoryInterface
423
     */
424
    public static function submitterFactory(SubmitterFactoryInterface $factory = null): SubmitterFactoryInterface
425
    {
426
        if ($factory instanceof SubmitterFactoryInterface) {
427
            self::$submitter_factory = $factory;
428
        }
429
430
        return self::$submitter_factory;
431
    }
432
433
    /**
434
     * Store or retrieve a factory object.
435
     *
436
     * @param TimestampFactoryInterface|null $factory
437
     *
438
     * @return TimestampFactoryInterface
439
     */
440
    public static function timestampFactory(TimestampFactoryInterface $factory = null): TimestampFactoryInterface
441
    {
442
        if ($factory instanceof TimestampFactoryInterface) {
443
            self::$timestamp_factory = $factory;
444
        }
445
446
        return self::$timestamp_factory;
447
    }
448
449
    /**
450
     * Store or retrieve a factory object.
451
     *
452
     * @param XrefFactoryInterface|null $factory
453
     *
454
     * @return XrefFactoryInterface
455
     */
456
    public static function xrefFactory(XrefFactoryInterface $factory = null): XrefFactoryInterface
457
    {
458
        if ($factory instanceof XrefFactoryInterface) {
459
            self::$xref_factory = $factory;
460
        }
461
462
        return self::$xref_factory;
463
    }
464
}
465