/*
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 java.io.IOException;
import java.io.UnsupportedEncodingException;
/**
* My instances represent the ID3v2Frame text encoding byte
* of the ID3v2 header as described in
* http://www.id3.org/id3v2.3.0.html#sec4.2.
*
* @author Christian Pesch
* @version $Id: TextEncodingSection.java 925 2006-12-29 14:37:25Z cpesch $
*/
public class TextEncodingSection extends AbstractSection {
public static final int ENCODING_SIZE = 1;
/**
* Encoding to use when converting from Unicode (String) to bytes.
*/
protected static final String[] ENCODINGS = {ID3v2Header.ISO_8859_1_ENCODING, "UTF16", "UTF-16BE", "UTF-8"};
protected int getEncodingIndex(String encoding) {
for (int i = 0; i < ENCODINGS.length; i++) {
if (ENCODINGS[i].equals(encoding))
return i;
}
return -1;
}
// --- read/write object ------------------------------------
public int parse(byte[] data, int offset, ID3v2Frame frame) throws IOException {
byte encoding = data[offset];
// default to ISO8859-1 encoding
if (encoding < 0 || encoding > ENCODINGS.length)
encoding = 0;
setEncoding(encoding);
return ENCODING_SIZE;
}
public byte[] getBytes(ID3v2Frame frame) throws UnsupportedEncodingException {
int encodingIndex = getEncodingIndex(getEncoding());
if (encodingIndex < 0)
encodingIndex = 0;
return new byte[]{(byte) encodingIndex};
}
public String getStringContent() {
return null;
}
// --- get/set object --------------------------------------
public String getEncoding() {
return encoding;
}
public void setEncoding(String encoding) {
if (getEncodingIndex(encoding) < 0)
throw new IllegalArgumentException("Encoding '" + encoding + "' is not known");
this.encoding = encoding;
}
private void setEncoding(int encoding) {
if (encoding < 0 || encoding > ENCODINGS.length)
throw new IllegalArgumentException("Encoding '" + encoding + "' is not known");
setEncoding(ENCODINGS[encoding]);
}
// --- overwrites Object -----------------------------------
public String toString() {
return "TextEncoding[" +
"encoding=" + getEncoding() +
"]";
}
// --- member variables ------------------------------------
// ID3v2 2.0 always uses ISO-8859-1 encoding, 3.0 defaults to ISO-8859-1
protected String encoding = ID3v2Header.ISO_8859_1_ENCODING;
}