Files
Phraseanet/lib/Alchemy/Phrasea/Cache/Factory.php
Romain Neutron e233e5afa6 Merge branch '3.8'
Conflicts:
	lib/Alchemy/Phrasea/Command/Developer/JavascriptBuilder.php
	lib/Alchemy/Phrasea/Controller/Prod/Basket.php
	lib/Alchemy/Phrasea/Core/Provider/TaskManagerServiceProvider.php
	lib/classes/Exception/Feed/ItemNotFound.php
	lib/classes/Exception/Feed/PublisherNotFound.php
	lib/classes/Feed/Abstract.php
	lib/classes/Feed/Adapter.php
	lib/classes/Feed/Aggregate.php
	lib/classes/Feed/Collection.php
	lib/classes/Feed/CollectionInterface.php
	lib/classes/Feed/Entry/Adapter.php
	lib/classes/Feed/Entry/Collection.php
	lib/classes/Feed/Entry/Interface.php
	lib/classes/Feed/Entry/Item.php
	lib/classes/Feed/Entry/ItemInterface.php
	lib/classes/Feed/Interface.php
	lib/classes/Feed/Link.php
	lib/classes/Feed/LinkInterface.php
	lib/classes/Feed/Publisher/Adapter.php
	lib/classes/Feed/Publisher/Interface.php
	lib/classes/Feed/Token.php
	lib/classes/Feed/TokenAggregate.php
	lib/classes/Feed/XML/Abstract.php
	lib/classes/Feed/XML/Atom.php
	lib/classes/Feed/XML/Cooliris.php
	lib/classes/Feed/XML/Interface.php
	lib/classes/Feed/XML/RSS.php
	lib/classes/Feed/XML/RSS/ImageInterface.php
	lib/classes/http/request.php
	lib/classes/module/console/schedulerStart.php
	lib/classes/module/console/schedulerState.php
	lib/classes/module/console/schedulerStop.php
	lib/classes/module/console/taskState.php
	lib/classes/module/console/tasklist.php
	lib/classes/module/console/taskrun.php
	lib/classes/registry.php
	lib/classes/registryInterface.php
	lib/classes/set/order.php
	lib/classes/system/url.php
	lib/classes/task/Scheduler.php
	lib/classes/task/appboxAbstract.php
	lib/classes/task/databoxAbstract.php
	lib/classes/task/manager.php
	lib/classes/task/period/RecordMover.php
	lib/classes/task/period/apibridge.php
	lib/classes/task/period/archive.php
	lib/classes/task/period/cindexer.php
	lib/classes/task/period/emptyColl.php
	lib/classes/task/period/ftp.php
	lib/classes/task/period/ftpPull.php
	lib/classes/task/period/subdef.php
	lib/classes/task/period/test.php
	lib/classes/task/period/writemeta.php
	lib/conf.d/PhraseaFixture/AbstractWZ.php
	lib/conf.d/PhraseaFixture/Basket/LoadFiveBaskets.php
	lib/conf.d/PhraseaFixture/Basket/LoadOneBasket.php
	lib/conf.d/PhraseaFixture/Basket/LoadOneBasketEnv.php
	lib/conf.d/PhraseaFixture/Lazaret/LoadOneFile.php
	lib/conf.d/PhraseaFixture/Story/LoadOneStory.php
	lib/conf.d/PhraseaFixture/UsrLists/ListAbstract.php
	lib/conf.d/PhraseaFixture/UsrLists/UsrList.php
	lib/conf.d/PhraseaFixture/UsrLists/UsrListEntry.php
	lib/conf.d/PhraseaFixture/UsrLists/UsrListOwner.php
	lib/conf.d/PhraseaFixture/ValidationParticipant/LoadOneParticipant.php
	lib/conf.d/PhraseaFixture/ValidationParticipant/LoadParticipantWithSession.php
	lib/conf.d/PhraseaFixture/ValidationSession/LoadOneValidationSession.php
2014-01-06 15:38:14 +01:00

135 lines
3.4 KiB
PHP

<?php
/*
* This file is part of Phraseanet
*
* (c) 2005-2014 Alchemy
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Alchemy\Phrasea\Cache;
use Alchemy\Phrasea\Cache\ApcCache;
use Alchemy\Phrasea\Cache\ArrayCache;
use Alchemy\Phrasea\Cache\Cache;
use Alchemy\Phrasea\Cache\MemcacheCache;
use Alchemy\Phrasea\Cache\RedisCache;
use Alchemy\Phrasea\Cache\WinCacheCache;
use Alchemy\Phrasea\Cache\XcacheCache;
use Alchemy\Phrasea\Exception\RuntimeException;
class Factory
{
private $connectionFactory;
public function __construct(ConnectionFactory $connectionFactory)
{
$this->connectionFactory = $connectionFactory;
}
/**
* @param type $name
* @param type $options
*
* @return Cache
*
* @throws RuntimeException
*/
public function create($name, $options)
{
switch (strtolower($name)) {
case 'apc':
case 'apccache':
$cache = $this->createApc();
break;
case 'array':
case 'arraycache':
$cache = new ArrayCache();
break;
case 'memcache':
case 'memcachecache':
$cache = $this->createMemcache($options);
break;
case 'memcached':
case 'memcachecached':
$cache = $this->createMemcached($options);
break;
case 'redis':
case 'rediscache':
$cache = $this->createRedis($options);
break;
case 'wincache':
case 'wincachecache':
$cache = $this->createWincache();
break;
case 'xcache':
case 'xcachecache':
$cache = $this->createXcache();
break;
default:
throw new RuntimeException(sprintf('Unnown cache type %s', $name));
}
return $cache;
}
private function createXcache()
{
if (!extension_loaded('xcache')) {
throw new RuntimeException('The XCache cache requires the XCache extension.');
}
return new XcacheCache();
}
private function createWincache()
{
if (!extension_loaded('wincache')) {
throw new RuntimeException('The WinCache cache requires the WinCache extension.');
}
return new WinCacheCache();
}
private function createRedis($options)
{
$redis = $this->connectionFactory->getRedisConnection($options);
$cache = new RedisCache();
$cache->setRedis($redis);
return $cache;
}
private function createMemcache($options)
{
$memcache = $this->connectionFactory->getMemcacheConnection($options);
$cache = new MemcacheCache();
$cache->setMemcache($memcache);
return $cache;
}
private function createMemcached($options)
{
$memcached = $this->connectionFactory->getMemcachedConnection($options);
$cache = new MemcachedCache();
$cache->setMemcached($memcached);
return $cache;
}
private function createApc()
{
if (!extension_loaded('apc')) {
throw new RuntimeException('The APC cache requires the APC extension.');
}
return new ApcCache();
}
}