package com.axiosys.bento4; import java.io.DataOutputStream; import java.io.IOException; import java.io.RandomAccessFile; import java.util.ArrayList; public class ContainerAtom extends Atom implements AtomParent { protected final ArrayList children = new ArrayList(); public ContainerAtom(int type, int size, boolean isFull, RandomAccessFile source) throws IOException { super(type, size, isFull, source); } public ContainerAtom(int type, int size, boolean isFull, RandomAccessFile source, AtomFactory atomFactory) throws IOException, InvalidFormatException { super(type, size, isFull, source); readChildren(atomFactory, source, getPayloadSize()); } public Atom findAtom(String path) { return AtomUtils.findAtom(this, path); } protected void writeFields(DataOutputStream stream) throws IOException { writeChildren(stream); } protected void readChildren(AtomFactory atomFactory, RandomAccessFile source, int size) throws IOException, InvalidFormatException { int[] bytesAvailable = new int[] { size }; Atom atom; // save and switch the context int savedContext = atomFactory.getContext(); atomFactory.setContext(type); do { atom = atomFactory.createAtom(source, bytesAvailable); if (atom != null) children.add(atom); } while (atom != null); // restore the saved context atomFactory.setContext(savedContext); } protected void writeChildren(DataOutputStream stream) throws IOException { for (int i=0; i