Open Journal Systems  3.3.0
ServiceBuilder.php
1 <?php
2 
4 
10 
16 class ServiceBuilder extends AbstractHasDispatcher implements ServiceBuilderInterface, \ArrayAccess, \Serializable
17 {
19  protected $builderConfig = array();
20 
22  protected $clients = array();
23 
25  protected static $cachedFactory;
26 
28  protected $plugins = array();
29 
41  public static function factory($config = null, array $globalParameters = array())
42  {
43  // @codeCoverageIgnoreStart
44  if (!static::$cachedFactory) {
45  static::$cachedFactory = new ServiceBuilderLoader();
46  }
47  // @codeCoverageIgnoreEnd
48 
49  return self::$cachedFactory->load($config, $globalParameters);
50  }
51 
58  public function __construct(array $serviceBuilderConfig = array())
59  {
60  $this->builderConfig = $serviceBuilderConfig;
61  }
62 
63  public static function getAllEvents()
64  {
65  return array('service_builder.create_client');
66  }
67 
68  public function unserialize($serialized)
69  {
70  $this->builderConfig = json_decode($serialized, true);
71  }
72 
73  public function serialize()
74  {
75  return json_encode($this->builderConfig);
76  }
77 
85  public function addGlobalPlugin(EventSubscriberInterface $plugin)
86  {
87  $this->plugins[] = $plugin;
88 
89  return $this;
90  }
91 
99  public function getData($name)
100  {
101  return isset($this->builderConfig[$name]) ? $this->builderConfig[$name] : null;
102  }
103 
104  public function get($name, $throwAway = false)
105  {
106  if (!isset($this->builderConfig[$name])) {
107 
108  // Check to see if arbitrary data is being referenced
109  if (isset($this->clients[$name])) {
110  return $this->clients[$name];
111  }
112 
113  // Check aliases and return a match if found
114  foreach ($this->builderConfig as $actualName => $config) {
115  if (isset($config['alias']) && $config['alias'] == $name) {
116  return $this->get($actualName, $throwAway);
117  }
118  }
119  throw new ServiceNotFoundException('No service is registered as ' . $name);
120  }
121 
122  if (!$throwAway && isset($this->clients[$name])) {
123  return $this->clients[$name];
124  }
125 
126  $builder =& $this->builderConfig[$name];
127 
128  // Convert references to the actual client
129  foreach ($builder['params'] as &$v) {
130  if (is_string($v) && substr($v, 0, 1) == '{' && substr($v, -1) == '}') {
131  $v = $this->get(trim($v, '{} '));
132  }
133  }
134 
135  // Get the configured parameters and merge in any parameters provided for throw-away clients
136  $config = $builder['params'];
137  if (is_array($throwAway)) {
138  $config = $throwAway + $config;
139  }
140 
141  $client = $builder['class']::factory($config);
142 
143  if (!$throwAway) {
144  $this->clients[$name] = $client;
145  }
146 
147  if ($client instanceof ClientInterface) {
148  foreach ($this->plugins as $plugin) {
149  $client->addSubscriber($plugin);
150  }
151  // Dispatch an event letting listeners know a client was created
152  $this->dispatch('service_builder.create_client', array('client' => $client));
153  }
154 
155  return $client;
156  }
157 
158  public function set($key, $service)
159  {
160  if (is_array($service) && isset($service['class']) && isset($service['params'])) {
161  $this->builderConfig[$key] = $service;
162  } else {
163  $this->clients[$key] = $service;
164  }
165 
166  return $this;
167  }
168 
169  public function offsetSet($offset, $value)
170  {
171  $this->set($offset, $value);
172  }
173 
174  public function offsetUnset($offset)
175  {
176  unset($this->builderConfig[$offset]);
177  unset($this->clients[$offset]);
178  }
179 
180  public function offsetExists($offset)
181  {
182  return isset($this->builderConfig[$offset]) || isset($this->clients[$offset]);
183  }
184 
185  public function offsetGet($offset)
186  {
187  return $this->get($offset);
188  }
189 }
Guzzle\Service\Builder\ServiceBuilder\factory
static factory($config=null, array $globalParameters=array())
Definition: ServiceBuilder.php:50
Guzzle\Service\Builder\ServiceBuilder\offsetUnset
offsetUnset($offset)
Definition: ServiceBuilder.php:183
Guzzle\Service\Builder\ServiceBuilder\unserialize
unserialize($serialized)
Definition: ServiceBuilder.php:77
Guzzle\Service\Exception\ServiceBuilderException
Definition: ServiceBuilderException.php:7
Guzzle\Service\Builder\ServiceBuilder\$cachedFactory
static $cachedFactory
Definition: ServiceBuilder.php:32
Symfony\Component\EventDispatcher\EventSubscriberInterface
Definition: lib/vendor/symfony/event-dispatcher/EventSubscriberInterface.php:25
Guzzle\Service\Builder\ServiceBuilder\getData
getData($name)
Definition: ServiceBuilder.php:108
Guzzle\Service\Builder\ServiceBuilder\__construct
__construct(array $serviceBuilderConfig=array())
Definition: ServiceBuilder.php:67
Guzzle\Service\Builder\ServiceBuilder\serialize
serialize()
Definition: ServiceBuilder.php:82
Guzzle\Service\Builder\ServiceBuilder\offsetGet
offsetGet($offset)
Definition: ServiceBuilder.php:194
plugins
Guzzle\Service\Builder\ServiceBuilder\addGlobalPlugin
addGlobalPlugin(EventSubscriberInterface $plugin)
Definition: ServiceBuilder.php:94
Guzzle\Service\Builder\ServiceBuilderLoader
Definition: ServiceBuilderLoader.php:11
Guzzle\Service\Builder\ServiceBuilder\$builderConfig
$builderConfig
Definition: ServiceBuilder.php:22
Guzzle\Service\Exception\ServiceNotFoundException
Definition: ServiceNotFoundException.php:5
Guzzle\Service\ClientInterface
Definition: lib/vendor/guzzle/guzzle/src/Guzzle/Service/ClientInterface.php:16
Guzzle\Service\Builder
Definition: ServiceBuilder.php:3
Guzzle\Service\Builder\ServiceBuilder\getAllEvents
static getAllEvents()
Definition: ServiceBuilder.php:72
Guzzle\Service\Builder\ServiceBuilder\$plugins
$plugins
Definition: ServiceBuilder.php:37
Guzzle\Service\Builder\ServiceBuilder\offsetSet
offsetSet($offset, $value)
Definition: ServiceBuilder.php:178
Guzzle\Common\AbstractHasDispatcher\dispatch
dispatch($eventName, array $context=array())
Definition: AbstractHasDispatcher.php:41
Guzzle\Service\Builder\ServiceBuilder
Definition: ServiceBuilder.php:16
Guzzle\Common\AbstractHasDispatcher
Definition: AbstractHasDispatcher.php:12
Guzzle\Service\Builder\ServiceBuilderInterface
Definition: ServiceBuilderInterface.php:13
Guzzle\Service\Builder\ServiceBuilder\$clients
$clients
Definition: ServiceBuilder.php:28
Guzzle\Service\Builder\ServiceBuilder\offsetExists
offsetExists($offset)
Definition: ServiceBuilder.php:189