package com.limegroup.gnutella.metadata; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.limegroup.gnutella.xml.LimeXMLDocument; import com.limegroup.gnutella.xml.LimeXMLUtils; /** * a metadata editor for audio files. */ public abstract class AudioMetaDataEditor extends MetaDataEditor { private Log LOG = LogFactory.getLog(AudioMetaDataEditor.class); protected String title_; protected String artist_; protected String album_; protected String year_; protected String track_; protected String comment_; protected String genre_; protected String license_; private static final String TITLE = "audios__audio__title__"; private static final String ARTIST = "audios__audio__artist__"; private static final String ALBUM = "audios__audio__album__"; private static final String YEAR = "audios__audio__year__"; private static final String TRACK = "audios__audio__track__"; private static final String COMMENT = "audios__audio__comments__"; private static final String GENRE = "audios__audio__genre__"; private static final String LICENSE = "audios__audio__license__"; /** * Determines if this editor matches every field of another. */ public boolean equals(Object o) { if( o == this ) return true; if( !(o instanceof MetaDataEditor) ) return false; AudioMetaDataEditor other = (AudioMetaDataEditor)o; return matches(title_, other.title_) && matches(artist_, other.artist_) && matches(album_, other.album_) && matches(year_, other.year_) && matches(track_, other.track_) && matches(comment_, other.comment_) && matches(genre_, other.genre_) && matches(license_, other.license_); } /** * Determines if this editor has all better fields than another. */ public boolean betterThan(MetaDataEditor o) { AudioMetaDataEditor other = (AudioMetaDataEditor)o; return firstBetter(title_, other.title_) && firstBetter(artist_, other.artist_) && firstBetter(album_, other.album_) && firstBetter(track_, other.track_) && firstBetter(comment_, other.comment_) && firstBetter(genre_, other.genre_) && firstBetter(license_, other.license_); } /** * Sets the fields in this editor to be the better of the two * editors. */ public void pickBetterFields(MetaDataEditor o) { AudioMetaDataEditor other = (AudioMetaDataEditor)o; if(firstBetter(other.title_, title_)) title_ = other.title_; if(firstBetter(other.artist_, artist_)) artist_ = other.artist_; if(firstBetter(other.album_, album_)) album_ = other.album_; if(firstBetter(other.track_, track_)) track_ = other.track_; if(firstBetter(other.comment_, comment_)) comment_ = other.comment_; if(firstBetter(other.genre_, genre_)) genre_ = other.genre_; if(firstBetter(other.license_, license_)) license_ = other.license_; } /** * Factory method for retrieving the correct editor * for a given file. */ public static MetaDataEditor getEditorForFile(String name) { if (LimeXMLUtils.isMP3File(name)) return new MP3DataEditor(); if (LimeXMLUtils.isOGGFile(name)) return new OGGDataEditor(); return null; } /** * Populates the internal values from the document. */ public void populate(LimeXMLDocument doc) { title_ = doc.getValue(TITLE); artist_ = doc.getValue(ARTIST); album_ = doc.getValue(ALBUM); year_ = doc.getValue(YEAR); track_ = doc.getValue(TRACK); comment_ = doc.getValue(COMMENT); genre_ = doc.getValue(GENRE); license_ = doc.getValue(LICENSE); } }