Chris@14
|
1 <?php
|
Chris@14
|
2 /**
|
Chris@14
|
3 * Copyright 2012-2017 Anthon Pang. All Rights Reserved.
|
Chris@14
|
4 *
|
Chris@14
|
5 * Licensed under the Apache License, Version 2.0 (the "License");
|
Chris@14
|
6 * you may not use this file except in compliance with the License.
|
Chris@14
|
7 * You may obtain a copy of the License at
|
Chris@14
|
8 *
|
Chris@14
|
9 * http://www.apache.org/licenses/LICENSE-2.0
|
Chris@14
|
10 *
|
Chris@14
|
11 * Unless required by applicable law or agreed to in writing, software
|
Chris@14
|
12 * distributed under the License is distributed on an "AS IS" BASIS,
|
Chris@14
|
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
Chris@14
|
14 * See the License for the specific language governing permissions and
|
Chris@14
|
15 * limitations under the License.
|
Chris@14
|
16 *
|
Chris@14
|
17 * @package WebDriver
|
Chris@14
|
18 *
|
Chris@14
|
19 * @author Anthon Pang <apang@softwaredevelopment.ca>
|
Chris@14
|
20 */
|
Chris@14
|
21
|
Chris@14
|
22 namespace WebDriver;
|
Chris@14
|
23
|
Chris@14
|
24 /**
|
Chris@14
|
25 * WebDriver\ServiceFactory class
|
Chris@14
|
26 *
|
Chris@14
|
27 * A service factory
|
Chris@14
|
28 *
|
Chris@14
|
29 * @package WebDriver
|
Chris@14
|
30 */
|
Chris@14
|
31 final class ServiceFactory
|
Chris@14
|
32 {
|
Chris@14
|
33 /**
|
Chris@14
|
34 * singleton
|
Chris@14
|
35 *
|
Chris@14
|
36 * @var \WebDriver\ServiceFactory
|
Chris@14
|
37 */
|
Chris@14
|
38 private static $instance;
|
Chris@14
|
39
|
Chris@14
|
40 /**
|
Chris@14
|
41 * @var array
|
Chris@14
|
42 */
|
Chris@14
|
43 protected $services;
|
Chris@14
|
44
|
Chris@14
|
45 /**
|
Chris@14
|
46 * @var array
|
Chris@14
|
47 */
|
Chris@14
|
48 protected $serviceClasses;
|
Chris@14
|
49
|
Chris@14
|
50 /**
|
Chris@14
|
51 * Private constructor
|
Chris@14
|
52 */
|
Chris@14
|
53 private function __construct()
|
Chris@14
|
54 {
|
Chris@14
|
55 $this->services = array();
|
Chris@14
|
56
|
Chris@14
|
57 $this->serviceClasses = array(
|
Chris@14
|
58 'service.curl' => '\\WebDriver\\Service\\CurlService',
|
Chris@14
|
59 );
|
Chris@14
|
60 }
|
Chris@14
|
61
|
Chris@14
|
62 /**
|
Chris@14
|
63 * Get singleton instance
|
Chris@14
|
64 *
|
Chris@14
|
65 * @return \WebDriver\ServiceFactory
|
Chris@14
|
66 */
|
Chris@14
|
67 public static function getInstance()
|
Chris@14
|
68 {
|
Chris@14
|
69 if (!self::$instance) {
|
Chris@14
|
70 self::$instance = new self;
|
Chris@14
|
71 }
|
Chris@14
|
72
|
Chris@14
|
73 return self::$instance;
|
Chris@14
|
74 }
|
Chris@14
|
75
|
Chris@14
|
76 /**
|
Chris@14
|
77 * Get service
|
Chris@14
|
78 *
|
Chris@14
|
79 * @param string $serviceName Name of service
|
Chris@14
|
80 *
|
Chris@14
|
81 * @return object
|
Chris@14
|
82 */
|
Chris@14
|
83 public function getService($serviceName)
|
Chris@14
|
84 {
|
Chris@14
|
85 if (!isset($this->services[$serviceName])) {
|
Chris@14
|
86 $className = $this->serviceClasses[$serviceName];
|
Chris@14
|
87
|
Chris@14
|
88 $this->services[$serviceName] = new $className;
|
Chris@14
|
89 }
|
Chris@14
|
90
|
Chris@14
|
91 return $this->services[$serviceName];
|
Chris@14
|
92 }
|
Chris@14
|
93
|
Chris@14
|
94 /**
|
Chris@14
|
95 * Set service
|
Chris@14
|
96 *
|
Chris@14
|
97 * @param string $serviceName Name of service
|
Chris@14
|
98 * @param object $service Service instance
|
Chris@14
|
99 */
|
Chris@14
|
100 public function setService($serviceName, $service)
|
Chris@14
|
101 {
|
Chris@14
|
102 $this->services[$serviceName] = $service;
|
Chris@14
|
103 }
|
Chris@14
|
104
|
Chris@14
|
105 /**
|
Chris@14
|
106 * Override default service class
|
Chris@14
|
107 *
|
Chris@14
|
108 * @param string $serviceName Name of service
|
Chris@14
|
109 * @param string $className Name of service class
|
Chris@14
|
110 */
|
Chris@14
|
111 public function setServiceClass($serviceName, $className)
|
Chris@14
|
112 {
|
Chris@14
|
113 if (substr($className, 0, 1) !== '\\') {
|
Chris@14
|
114 $className = '\\' . $className;
|
Chris@14
|
115 }
|
Chris@14
|
116
|
Chris@14
|
117 $this->serviceClasses[$serviceName] = $className;
|
Chris@14
|
118 $this->services[$serviceName] = null;
|
Chris@14
|
119 }
|
Chris@14
|
120 }
|