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

/* --------------------------------------------------------------
  AdminAccessRoleCollection.inc.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 AdminAccessRoleCollection
 *
 * @category   System
 * @package    AdminAccess
 * @subpackage Collections
 */
class AdminAccessRoleCollection extends AbstractCollection
{
    /**
     * Adds a given role to this collection.
     *
     * @param AdminAccessRoleInterface $role Access role.
     *
     * @return AdminAccessRoleCollection Returns same instance for chained method calls.
     */
    public function add(AdminAccessRoleInterface $role)
    {
        $this->_add($role);
        
        return $this;
    }
    
    
    /**
     * Removes a given role from this collection.
     *
     * @param AdminAccessRoleInterface $role Access role.
     *
     * @throws RoleNotFoundInCollectionException If role is not in the collection.
     *
     * @return AdminAccessRoleCollection Returns same instance for chained method calls.
     */
    public function remove(AdminAccessRoleInterface $role)
    {
        $index = false;
        if(count($this->collectionContentArray) > 0)
        {
            /** @var \AdminAccessRoleInterface $collectionItem */
            foreach($this->collectionContentArray as $key => $collectionItem)
            {
                if($role->getId() === $collectionItem->getId())
                {
                    $index = $key;
                    break;
                }
            }
        }
        
        if(false === $index)
        {
            throw new RoleNotFoundInCollectionException(new NonEmptyStringType('Could not remove role because it does not exist in collection.'));
        }
        
        unset($this->collectionContentArray[$index]);
        
        return $this;
    }
    
    
    /**
     * Clones this collection.
     *
     * @return AdminAccessRoleCollection Clone of role collection, so changes on clone won't affect original collection.
     */
    public function getClone()
    {
        return clone $this;
    }
    
    
    /**
     * Return this collections valid type.
     *
     * This method must be implemented in the child-collection classes.
     *
     * @return string Valid type for role collection.
     */
    protected function _getValidType()
    {
        return AdminAccessRoleInterface::class;
    }
}