/* * myLib - https://github.com/taktod/myLib * Copyright (c) 2014 ttProject. All rights reserved. * * Licensed under The MIT license. */ package com.ttProject.media.mp4; import java.util.ArrayList; import java.util.List; import com.ttProject.nio.channels.IReadChannel; public abstract class ParentAtom extends Atom { /** 子要素一覧 */ private final List<Atom> atoms = new ArrayList<Atom>(); /** * コンストラクタ * @param name * @param position * @param size */ public ParentAtom(String name, int position, int size) { super(name, position, size); } /** * {@inheritDoc} */ @Override public void analyze(IReadChannel ch, IAtomAnalyzer analyzer) throws Exception { if(analyzer == null) { return; } if(!(analyzer instanceof IAtomAnalyzer)) { return; } IAtomAnalyzer atomAnalyzer = (IAtomAnalyzer)analyzer; ch.position(getPosition() + 8); Atom atom = null; while((atom = atomAnalyzer.analyze(ch)) != null) { atoms.add(atom); if(ch.position() >= getPosition() + getSize()) { break; } } } /** * 子要素一覧参照 * @return */ public List<Atom> getAtoms() { return new ArrayList<Atom>(atoms); } /** * {@inheritDoc} */ @Override public String toString(String space) { StringBuilder data = new StringBuilder(); data.append(super.toString(space)).append("[\n"); for(Atom atom : atoms) { data.append(atom).append("\n"); } data.append(space).append("]"); return data.toString(); } }