package org.farng.mp3.object;
import java.util.Arrays;
/**
* 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 abstract class AbstractMP3Object extends java.lang.Object {
protected Object value = null;
protected String identifier = "";
/**
* Creates a new AbstractMP3Object object.
*/
public AbstractMP3Object() {
this.value = null;
this.identifier = "";
}
/**
* Creates a new AbstractMP3Object object.
*/
public AbstractMP3Object(final AbstractMP3Object copyObject) {
// no copy constructor in super class
this.identifier = new String(copyObject.identifier);
if (copyObject.value == null) {
this.value = null;
} else if (copyObject.value instanceof String) {
this.value = new String((String) copyObject.value);
} else if (copyObject.value instanceof Boolean) {
this.value = new Boolean(((Boolean) copyObject.value).booleanValue());
} else if (copyObject.value instanceof Byte) {
this.value = new Byte(((Byte) copyObject.value).byteValue());
} else if (copyObject.value instanceof Character) {
this.value = new Character(((Character) copyObject.value).charValue());
} else if (copyObject.value instanceof Double) {
this.value = new Double(((Double) copyObject.value).doubleValue());
} else if (copyObject.value instanceof Float) {
this.value = new Float(((Float) copyObject.value).floatValue());
} else if (copyObject.value instanceof Integer) {
this.value = new Integer(((Integer) copyObject.value).intValue());
} else if (copyObject.value instanceof Long) {
this.value = new Long(((Long) copyObject.value).longValue());
} else if (copyObject.value instanceof Short) {
this.value = new Short(((Short) copyObject.value).shortValue());
} else if (copyObject.value instanceof boolean[]) {
this.value = ((boolean[]) copyObject.value).clone();
} else if (copyObject.value instanceof byte[]) {
this.value = ((byte[]) copyObject.value).clone();
} else if (copyObject.value instanceof char[]) {
this.value = ((char[]) copyObject.value).clone();
} else if (copyObject.value instanceof double[]) {
this.value = ((double[]) copyObject.value).clone();
} else if (copyObject.value instanceof float[]) {
this.value = ((float[]) copyObject.value).clone();
} else if (copyObject.value instanceof int[]) {
this.value = ((int[]) copyObject.value).clone();
} else if (copyObject.value instanceof long[]) {
this.value = ((long[]) copyObject.value).clone();
} else if (copyObject.value instanceof short[]) {
this.value = ((short[]) copyObject.value).clone();
} else if (copyObject.value instanceof Object[]) {
this.value = ((Object[]) copyObject.value).clone();
} else {
throw new UnsupportedOperationException("Unable to create copy of class " + copyObject.getClass());
}
}
public String getIdentifier() {
return this.identifier;
}
public void setValue(final Object value) {
this.value = value;
}
public Object getValue() {
return this.value;
}
public final void readByteArray(final byte[] arr) {
readByteArray(arr, 0);
}
public final void readString(final String str) {
readString(str, 0);
}
public abstract int getSize();
public void readByteArray(final byte[] arr, final int offset) {
readString(new String(arr), offset);
}
public void readString(final String str, final int offset) {
readByteArray(str.substring(offset).getBytes(), 0);
}
public abstract String toString();
public boolean equals(final Object obj) {
if ((obj instanceof AbstractMP3Object) == false) {
return false;
}
final AbstractMP3Object abstractMp3Object = (AbstractMP3Object) obj;
if (this.identifier.equals(abstractMp3Object.identifier) == false) {
return false;
}
if ((this.value == null) && (abstractMp3Object.value == null)) {
return true;
} else if ((this.value == null) || (abstractMp3Object.value == null)) {
return false;
}
// boolean[]
if (this.value instanceof boolean[] && abstractMp3Object.value instanceof boolean[]) {
if (Arrays.equals((boolean[]) this.value, (boolean[]) abstractMp3Object.value) == false) {
return false;
}
// byte[]
} else if (this.value instanceof byte[] && abstractMp3Object.value instanceof byte[]) {
if (Arrays.equals((byte[]) this.value, (byte[]) abstractMp3Object.value) == false) {
return false;
}
// char[]
} else if (this.value instanceof char[] && abstractMp3Object.value instanceof char[]) {
if (Arrays.equals((char[]) this.value, (char[]) abstractMp3Object.value) == false) {
return false;
}
// double[]
} else if (this.value instanceof double[] && abstractMp3Object.value instanceof double[]) {
if (Arrays.equals((double[]) this.value, (double[]) abstractMp3Object.value) == false) {
return false;
}
// float[]
} else if (this.value instanceof float[] && abstractMp3Object.value instanceof float[]) {
if (Arrays.equals((float[]) this.value, (float[]) abstractMp3Object.value) == false) {
return false;
}
// int[]
} else if (this.value instanceof int[] && abstractMp3Object.value instanceof int[]) {
if (Arrays.equals((int[]) this.value, (int[]) abstractMp3Object.value) == false) {
return false;
}
// long[]
} else if (this.value instanceof long[] && abstractMp3Object.value instanceof long[]) {
if (Arrays.equals((long[]) this.value, (long[]) abstractMp3Object.value) == false) {
return false;
}
// Object[]
} else if (this.value instanceof Object[] && abstractMp3Object.value instanceof Object[]) {
if (Arrays.equals((Object[]) this.value, (Object[]) abstractMp3Object.value) == false) {
return false;
}
// short[]
} else if (this.value instanceof short[] && abstractMp3Object.value instanceof short[]) {
if (Arrays.equals((short[]) this.value, (short[]) abstractMp3Object.value) == false) {
return false;
}
} else if (this.value.equals(abstractMp3Object.value) == false) {
return false;
}
return true;
}
public byte[] writeByteArray() {
return writeString().getBytes();
}
public String writeString() {
return new String(writeByteArray());
}
}