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 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
<?php
/* --------------------------------------------------------------
ProductAttributeRepository.inc.php 2016-01-07
Gambio GmbH
http://www.gambio.de
Copyright (c) 2015 Gambio GmbH
Released under the GNU General Public License (Version 2)
[http://www.gnu.org/licenses/gpl-2.0.html]
--------------------------------------------------------------
*/
/**
* Class ProductAttributeRepository
*
* @category System
* @package ProductModule
* @subpackage Repositories
*/
class ProductAttributeRepository implements ProductAttributeRepositoryInterface
{
/**
* @var ProductAttributeRepositoryReaderInterface
*/
protected $reader;
/**
* @var ProductAttributeRepositoryWriterInterface
*/
protected $writer;
/**
* @var ProductAttributeRepositoryDeleterInterface
*/
protected $deleter;
/**
* Initialize the product attribute repository.
*
* @param ProductAttributeRepositoryReaderInterface $reader
* @param ProductAttributeRepositoryWriterInterface $writer
* @param ProductAttributeRepositoryDeleterInterface $deleter
*/
public function __construct(ProductAttributeRepositoryReaderInterface $reader,
ProductAttributeRepositoryWriterInterface $writer,
ProductAttributeRepositoryDeleterInterface $deleter)
{
$this->reader = $reader;
$this->writer = $writer;
$this->deleter = $deleter;
}
/**
* Adds an product attribute to a product by the given id.
*
* @param IdType $productId Id of product entity that adds the attribute.
* @param ProductAttributeInterface $productAttribute Product attribute entity to add.
*
* @return int Id of added product attribute entity.
*/
public function addToProduct(IdType $productId, ProductAttributeInterface $productAttribute)
{
return $this->writer->insertIntoProduct($productId, $productAttribute);
}
/**
* Stores/Updates the passed product attribute entity.
*
* @param StoredProductAttributeInterface $productAttribute Product attribute entity to store.
*
* @return ProductAttributeRepository|$this Same instance for chained method calls.
*/
public function store(StoredProductAttributeInterface $productAttribute)
{
$this->writer->update($productAttribute);
return $this;
}
/**
* Returns a stored product attribute entity by the given product attribute id.
*
* @param IdType $productAttributeId Id of expected product attribute entity.
*
* @return StoredProductAttributeInterface Expected stored product attribute entity.
*/
public function getAttributeById(IdType $productAttributeId)
{
return $this->reader->getAttributeById($productAttributeId);
}
/**
* Returns a collection with all attribute entities that belongs to a product entity by the given product id.
*
* @param IdType $productId Id of product entity that contain the expected attributes.
*
* @return StoredProductAttributeCollection Collection with all attributes that belongs to the product.
*/
public function getAttributesByProductId(IdType $productId)
{
return $this->reader->getAttributesByProductId($productId);
}
/**
* Removes a product attribute entity by the given product attribute id.
*
* @param IdType $productAttributeId Id of product attribute entity that should be deleted.
*
* @return ProductAttributeRepository|$this Same instance for chained method calls.
*/
public function deleteAttributeById(IdType $productAttributeId)
{
$this->deleter->deleteAttributeById($productAttributeId);
return $this;
}
/**
* Removes product attributes by the given product id.
*
* @param IdType $productId Id of product entity of the attributes that should be deleted.
*
* @return ProductAttributeRepository|$this Same instance for chained method calls.
*/
public function deleteAttributesByProductId(IdType $productId)
{
$this->deleter->deleteAttributesByProductId($productId);
return $this;
}
}