/* You may freely copy, distribute, modify and use this class as long as the original author attribution remains intact. See message below. Copyright (C) 2001-2003 Christian Pesch. All Rights Reserved. */ package slash.metamusic.mp3.sections; import slash.metamusic.mp3.ID3v2Frame; import slash.metamusic.mp3.ID3v2Header; import slash.metamusic.util.StringHelper; import java.io.IOException; import java.io.UnsupportedEncodingException; /** * My instances represent the ID3v2Frame type section * of the ID3v2 header as described in * http://www.id3.org/id3v2.3.0.html#sec4.2. * * @author Christian Pesch * @version $Id: LanguageSection.java 910 2006-12-23 12:18:38Z cpesch $ */ public class LanguageSection extends AbstractSection { public static final int LANGUAGE_SIZE = 3; // --- read/write object ------------------------------------ public int parse(byte[] data, int offset, ID3v2Frame frame) throws IOException { try { if (offset + LANGUAGE_SIZE <= data.length) { String string = StringHelper.trim(new String(data, offset, LANGUAGE_SIZE, ID3v2Header.ISO_8859_1_ENCODING)); setCode(string); return LANGUAGE_SIZE; } } catch (IllegalArgumentException e) { // intentionally left empty } return 0; } public byte[] getBytes(ID3v2Frame frame) throws UnsupportedEncodingException { String string = getType() == null ? "XXX" : getType().getCode(); return string.getBytes(ID3v2Header.ISO_8859_1_ENCODING); } public String getStringContent() { return getType() == null ? "XXX" : getType().getLanguage() + "(" + getType().getCode() + ")"; } // --- get/set object -------------------------------------- public ISO639Type getType() { return type; } public String getLanguage() { return getType() != null ? getType().getLanguage() : ""; } public void setCode(String iso639Code) { // MP3-Editor-3.06 and MusicMatch 7.00 use three zeros as language encoding if (iso639Code.equals("XXX") || iso639Code.equals("\u0000\u0000\u0000")) this.type = null; else if (!ISO639Type.isKnownISO639Type(iso639Code)) throw new IllegalArgumentException("Language type code " + iso639Code + " is not known"); setType(ISO639Type.getISO639Type(iso639Code)); } public void setLanguage(String language) { if (language.equals("")) this.type = null; else if (!ISO639Type.isKnownISO639Language(language)) throw new IllegalArgumentException("Language " + language + " is not known"); setType(ISO639Type.getISO639Language(language)); } public void setType(ISO639Type iso639Code) { this.type = iso639Code; } // --- overwrites Object ----------------------------------- public String toString() { return "Language[" + "type=" + getType() + "]"; } // --- member variables ------------------------------------ // default for type is XXX, as lame uses it protected ISO639Type type = null; }