package org.farng.mp3.object; import java.util.HashMap; import java.util.Iterator; import java.util.TreeSet; import org.farng.mp3.TagConstant; /** * 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: 2374 $ */ public class ObjectStringHashMap extends ObjectStringFixedLength implements ObjectHashMapInterface { public static final String LANGUAGE = "Language"; HashMap idToString = null; HashMap stringToId = null; boolean hasEmptyValue = false; /** * Creates a new ObjectStringHashMap object. */ public ObjectStringHashMap(final String identifier, final int size) { super(identifier, size); if (identifier.equals(ObjectStringHashMap.LANGUAGE)) { this.stringToId = TagConstant.languageStringToId; this.idToString = TagConstant.languageIdToString; } else { throw new IllegalArgumentException("Hashmap identifier not defined in this class: " + identifier); } } /** * Creates a new ObjectStringHashMap object. */ public ObjectStringHashMap(final ObjectStringHashMap copyObject) { super(copyObject); this.hasEmptyValue = copyObject.hasEmptyValue; this.idToString = copyObject.idToString; this.stringToId = copyObject.stringToId; } public HashMap getIdToString() { return this.idToString; } public HashMap getStringToId() { return this.stringToId; } public void setValue(final Object value) { if (value instanceof String) { this.value = ((String) value).toLowerCase(); } else { this.value = value; } } public boolean equals(final Object obj) { if ((obj instanceof ObjectStringHashMap) == false) { return false; } final ObjectStringHashMap objectStringHashMap = (ObjectStringHashMap) obj; if (this.hasEmptyValue != objectStringHashMap.hasEmptyValue) { return false; } if (this.idToString == null) { if (objectStringHashMap.idToString != null) { return false; } } else { if (this.idToString.equals(objectStringHashMap.idToString) == false) { return false; } } if (this.idToString == null) { if (objectStringHashMap.idToString != null) { return false; } } else { if (this.stringToId.equals(objectStringHashMap.stringToId) == false) { return false; } } return super.equals(obj); } public Iterator iterator() { if (this.idToString == null) { return null; } // put them in a treeset first to sort them final TreeSet treeSet = new TreeSet(this.idToString.values()); if (this.hasEmptyValue) { treeSet.add(""); } return treeSet.iterator(); } public String toString() { if (this.value == null) { return ""; } else if (this.idToString.get(this.value) == null) { return ""; } else { return this.idToString.get(this.value).toString(); } } }