1<?php
2
3/*
4 * This file is part of the Assetic package, an OpenSky project.
5 *
6 * (c) 2010-2014 OpenSky Project Inc
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Assetic\Asset;
13
14/**
15 * An asset collection.
16 *
17 * @author Kris Wallsmith <kris.wallsmith@gmail.com>
18 */
19interface AssetCollectionInterface extends AssetInterface, \Traversable
20{
21    /**
22     * Returns all child assets.
23     *
24     * @return array An array of AssetInterface objects
25     */
26    public function all();
27
28    /**
29     * Adds an asset to the current collection.
30     *
31     * @param AssetInterface $asset An asset
32     */
33    public function add(AssetInterface $asset);
34
35    /**
36     * Removes a leaf.
37     *
38     * @param AssetInterface $leaf     The leaf to remove
39     * @param Boolean        $graceful Whether the failure should return false or throw an exception
40     *
41     * @return Boolean Whether the asset has been found
42     *
43     * @throws \InvalidArgumentException If the asset cannot be found
44     */
45    public function removeLeaf(AssetInterface $leaf, $graceful = false);
46
47    /**
48     * Replaces an existing leaf with a new one.
49     *
50     * @param AssetInterface $needle      The current asset to replace
51     * @param AssetInterface $replacement The new asset
52     * @param Boolean        $graceful    Whether the failure should return false or throw an exception
53     *
54     * @return Boolean Whether the asset has been found
55     *
56     * @throws \InvalidArgumentException If the asset cannot be found
57     */
58    public function replaceLeaf(AssetInterface $needle, AssetInterface $replacement, $graceful = false);
59}
60