/* * Entagged Audio Tag library * Copyright (c) 2003-2005 Raphaƫl Slinckx <raphael@slinckx.net> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ package org.jaudiotagger.tag.mp4.field; import org.jaudiotagger.audio.mp4.atom.Mp4BoxHeader; import org.jaudiotagger.tag.TagField; import org.jaudiotagger.tag.TagTextField; import org.jaudiotagger.tag.mp4.Mp4TagField; import org.jaudiotagger.tag.mp4.atom.Mp4DataBox; import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; /** * Represents a single text field * <p/> * <p>Mp4 metadata normally held as follows: * <pre> * MP4Box Parent contains * :length (includes length of data child) (4 bytes) * :name (4 bytes) * :child with * :length (4 bytes) * :name 'Data' (4 bytes) * :atom version (1 byte) * :atom type flags (3 bytes) * :null field (4 bytes) * :data * </pre> * <p/> * <p>Note:This class is initilized with the child data atom only, the parent data has already been processed, this may * change as it seems that code should probably be enscapulated into this. Whereas the raw content returned by the * getRawContent() contais the byte data for parent and child. */ public class Mp4TagTextField extends Mp4TagField implements TagTextField { protected int dataSize; protected String content; /** * Construct from File * * @param id parent id * @param data atom data * @throws UnsupportedEncodingException */ public Mp4TagTextField(String id, ByteBuffer data) throws UnsupportedEncodingException { super(id, data); } /** * Construct new Field * * @param id parent id * @param content data atom data */ public Mp4TagTextField(String id, String content) { super(id); this.content = content; } protected void build(ByteBuffer data) throws UnsupportedEncodingException { //Data actually contains a 'Data' Box so process data using this Mp4BoxHeader header = new Mp4BoxHeader(data); Mp4DataBox databox = new Mp4DataBox(header, data); dataSize = header.getDataLength(); content = databox.getContent(); } public void copyContent(TagField field) { if (field instanceof Mp4TagTextField) { this.content = ((Mp4TagTextField) field).getContent(); } } public String getContent() { return content; } protected byte[] getDataBytes() throws UnsupportedEncodingException { return content.getBytes(getEncoding()); } public Mp4FieldType getFieldType() { return Mp4FieldType.TEXT; } public String getEncoding() { return Mp4BoxHeader.CHARSET_UTF_8; } public boolean isBinary() { return false; } public boolean isEmpty() { return this.content.trim().equals(""); } public void setContent(String s) { this.content = s; } public void setEncoding(String s) { /* Not allowed */ } public String toString() { return content; } }