1: <?php
2: /**
3: * You may not change or alter any portion of this comment or credits
4: * of supporting developers from this source code or any supporting source code
5: * which is considered copyrighted (c) material of the original comment or credit authors.
6: * This program is distributed in the hope that it will be useful,
7: * but WITHOUT ANY WARRANTY; without even the implied warranty of
8: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
9: */
10:
11: namespace Xoops\Core\Handler\Scheme;
12:
13: use Xoops\Core\Exception\NoHandlerException;
14: use Xoops\Core\Handler\FactorySpec;
15: use Xoops\Core\Kernel\XoopsObjectHandler;
16:
17:
18: /**
19: * FQN - build
20: *
21: * @category Xoops\Core\Handler\Scheme
22: * @package Xoops\Core
23: * @author Richard Griffith <richard@geekwright.com>
24: * @copyright 2015 XOOPS Project (http://xoops.org)
25: * @license GNU GPL 2 or later (http://www.gnu.org/licenses/gpl-2.0.html)
26: * @link http://xoops.org
27: */
28: class FQN implements SchemeInterface
29: {
30: /**
31: * build a handler from a fully qualified class name
32: *
33: * @param FactorySpec $spec specification for requested handler
34: *
35: * @return XoopsObjectHandler|null
36: */
37: public function build(FactorySpec $spec)
38: {
39: $handler = null;
40: $class = $spec->getName();
41: if (class_exists($class)) {
42: $handler = new $class($spec->getFactory()->db());
43: }
44: if ($handler === null) {
45: if (false === $spec->getOptional()) {
46: throw new NoHandlerException(sprintf('Class not found %s', $class));
47: }
48: }
49: return $handler;
50: }
51: }
52: