package org.farng.mp3.object;
import org.farng.mp3.TagUtility;
/**
* ID3v2 and Lyrics3v2 tags have individual fields <code>AbstractMP3Fragment</code>s Then each fragment is broken down
* in to individual <code>AbstractMP3Object</code>s
*
* @author Eric Farng
* @version $Revision: 1637 $
*/
public class ObjectStringFixedLength extends AbstractMP3Object {
int length = 0;
/**
* Creates a new ObjectStringFixedLength object.
*/
public ObjectStringFixedLength(final String identifier, final int length) {
if (length < 0) {
throw new IllegalArgumentException("length is less than zero: " + length);
}
this.identifier = identifier;
this.length = length;
}
/**
* Creates a new ObjectStringFixedLength object.
*/
public ObjectStringFixedLength(final ObjectStringFixedLength copyObject) {
super(copyObject);
this.length = copyObject.length;
}
public void setLength(final int size) {
this.length = size;
}
public int getLength() {
return this.length;
}
public int getSize() {
return this.length;
}
public boolean equals(final Object obj) {
if ((obj instanceof ObjectStringFixedLength) == false) {
return false;
}
final ObjectStringFixedLength objectStringFixedLength = (ObjectStringFixedLength) obj;
if (this.length != objectStringFixedLength.length) {
return false;
}
return super.equals(obj);
}
public void readString(final String str, final int offset) {
if (str == null) {
throw new NullPointerException("String is null");
}
if ((offset < 0) || (offset >= str.length())) {
throw new IndexOutOfBoundsException("Offset to String is out of bounds: offset = " +
offset +
", string.length()" +
str.length());
}
this.value = str.substring(offset, this.length + offset);
}
public String toString() {
return writeString();
}
public String writeString() {
final String str;
if (this.value == null) {
str = String.valueOf(new char[this.length]);
} else {
final int vlength = ((String) this.value).length();
if (vlength > this.length) {
str = ((String) this.value).substring(0, this.length);
} else if (vlength == this.length) {
str = (String) this.value;
} else {
str = TagUtility.padString((String) this.value, this.length, ' ', false);
}
}
return str;
}
}