1 /* 2 * Copyright 2008 CoreMedia AG, Hamburg 3 * 4 * Licensed under the Apache License, Version 2.0 (the License); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an AS IS BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.coremedia.iso.boxes; 18 19 import com.coremedia.iso.IsoFile; 20 21 import java.util.List; 22 23 /** 24 * Interface for all ISO boxes that may contain other boxes. 25 */ 26 public interface ContainerBox extends Box { 27 28 /** 29 * Gets all child boxes. May not return <code>null</code>. 30 * 31 * @return an array of boxes, empty array in case of no children. 32 */ getBoxes()33 List<Box> getBoxes(); 34 35 /** 36 * Sets all boxes and removes all previous child boxes. 37 * @param boxes the new list of children 38 */ setBoxes(List<Box> boxes)39 void setBoxes(List<Box> boxes); 40 41 /** 42 * Gets all child boxes of the given type. May not return <code>null</code>. 43 * 44 * @param clazz child box's type 45 * @return an array of boxes, empty array in case of no children. 46 */ getBoxes(Class<T> clazz)47 <T extends Box> List<T> getBoxes(Class<T> clazz); 48 49 /** 50 * Gets all child boxes of the given type. May not return <code>null</code>. 51 * 52 * @param clazz child box's type 53 * @param recursive step down the tree 54 * @return an array of boxes, empty array in case of no children. 55 */ getBoxes(Class<T> clazz, boolean recursive)56 <T extends Box> List<T> getBoxes(Class<T> clazz, boolean recursive); 57 58 /** 59 * Gets the parent box. May be <code>null</code> in case of the 60 * {@link com.coremedia.iso.IsoFile} itself. 61 * 62 * @return a <code>ContainerBox</code> that contains <code>this</code> 63 */ getParent()64 ContainerBox getParent(); 65 66 /** 67 * Returns the number of bytes from the start of the box to start of the first child. 68 * 69 * @return offset of first child from box start 70 */ getNumOfBytesToFirstChild()71 long getNumOfBytesToFirstChild(); 72 getIsoFile()73 IsoFile getIsoFile(); 74 } 75