1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107 
<?php
/* --------------------------------------------------------------
   VersionInfoServiceFactory.inc.php 2017-03-13
   Gambio GmbH
   http://www.gambio.de
   Copyright (c) 2017 Gambio GmbH
   Released under the GNU General Public License (Version 2)
   [http://www.gnu.org/licenses/gpl-2.0.html]
   --------------------------------------------------------------
*/

/**
 * Class VersionInfoServiceFactory
 *
 * @category   Core
 * @package    VersionInfo
 * @subpackage Factories
 */
class VersionInfoServiceFactory
{
    /**
     * Database connection.
     *
     * @var CI_DB_query_builder
     */
    protected $db;
    
    /**
     * Absolute file path for the version info receipts.
     *
     * @var ExistingDirectory
     */
    protected $versionInfoFilePath;
    
    /**
     * @var VersionInfoItemFactory
     */
    protected $versionInfoItemFactory;
    
    
    /**
     * VersionInfoServiceFactory constructor.
     *
     * @param CI_DB_query_builder $db                  Database connection.
     * @param ExistingDirectory   $versionInfoFilePath Existing Directory.
     */
    public function __construct(CI_DB_query_builder $db, ExistingDirectory $versionInfoFilePath)
    {
        $this->db                  = $db;
        $this->versionInfoFilePath = $versionInfoFilePath;
    }
    
    
    /**
     * Creates a version info read service.
     *
     * @return VersionInfoService
     */
    public function createVersionInfoService()
    {
        $repository = $this->_createVersionInfoRepository();
        
        return MainFactory::create('VersionInfoService', $repository);
    }
    
    
    /**
     * @return VersionInfoRepository
     */
    protected function _createVersionInfoRepository()
    {
        $databaseReader = $this->_createVersionInfoDatabaseReader();
        $fileReader     = $this->_createVersionInfoFileReader();
        
        return MainFactory::create('VersionInfoRepository', $databaseReader, $fileReader);
    }
    
    
    /**
     * @return VersionInfoFileReader
     */
    protected function _createVersionInfoFileReader()
    {
        return MainFactory::create('VersionInfoFileReader', $this->versionInfoFilePath,
                                   $this->_createVersionInfoItemFactory());
    }
    
    
    /**
     * @return VersionInfoDatabaseReader
     */
    protected function _createVersionInfoDatabaseReader()
    {
        return MainFactory::create('VersionInfoDatabaseReader', $this->db, $this->_createVersionInfoItemFactory());
    }
    
    
    protected function _createVersionInfoItemFactory()
    {
        if($this->versionInfoItemFactory === null)
        {
            $this->versionInfoItemFactory = MainFactory::create('VersionInfoItemFactory');
        }
        
        return $this->versionInfoItemFactory;
    }
}