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 
<?php

/* --------------------------------------------------------------
  AdminAccessGroupItemCollection.php 2018-01-22
  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 AdminAccessGroupItemCollection
 *
 * @category   System
 * @package    AdminAccess
 * @subpackage Collections
 */
class AdminAccessGroupItemCollection extends AbstractCollection
{
    /**
     * Return this collections valid type.
     *
     * @return string Valid type for group collection.
     */
    protected function _getValidType()
    {
        return AdminAccessGroupItemInterface::class;
    }
    
    
    /**
     * Add a new group item to this collection.
     *
     * @param \AdminAccessGroupItemInterface $item Item which should add to the collection
     *
     * @return \AdminAccessGroupItemCollection
     *
     * @throws \InvalidArgumentException When $item has an invalid type.
     */
    public function add(AdminAccessGroupItemInterface $item)
    {
        $this->_add($item);
        
        return $this;
    }
    
    
    /**
     * Removes a given group item from this collection.
     *
     * @param AdminAccessGroupItemInterface $item Group item.
     *
     * @return AdminAccessGroupitemCollection Returns same instance for chained method calls.
     *
     * @throws GroupItemNotFoundInCollectionException
     */
    public function remove(AdminAccessGroupItemInterface $item)
    {
        $index = false;
        if(count($this->collectionContentArray) > 0)
        {
            /** @var \AdminAccessGroupItemInterface $collectionItem */
            foreach($this->collectionContentArray as $key => $collectionItem)
            {
                if($item->getGroupId() === $collectionItem->getGroupId()
                   && $item->getIdentifier() === $collectionItem->getIdentifier()
                   && $item->getType() === $collectionItem->getType())
                {
                    $index = $key;
                    break;
                }
            }
        }
        
        if(false === $index)
        {
            throw new GroupItemNotFoundInCollectionException(new NonEmptyStringType('Could not remove group item because it does not exist in collection.'));
        }
        
        unset($this->collectionContentArray[$index]);
        
        return $this;
    }
}