package com.limegroup.gnutella.metadata; import com.limegroup.gnutella.metadata.audio.AudioMetaData; import com.limegroup.gnutella.xml.LimeXMLDocument; import com.limegroup.gnutella.xml.LimeXMLReplyCollection.MetaDataState; /** * A utility class that writes modified LimeXMLDocuments as Meta-data to * an audio or video file. */ public class MetaDataWriter { /** * File we're writing to. */ private final String fileName; /** * The editor that we're using. */ private final MetaWriter editor; /** * The audio data to be written to the file. */ private final AudioMetaData audioData; /** * LimeXMLDocument that populated the MetaData. */ protected LimeXMLDocument correctDocument= null; public MetaDataWriter(String fileName, MetaDataFactory metaDataFactory) { this.fileName = fileName; this.audioData = new AudioMetaData(); editor = metaDataFactory.getEditorForFile(fileName); } public boolean needsToUpdate(MetaData data) { if(editor == null) return false; else if ( data == null ) return true; return !audioData.equals(data); } /** * Performs the actual write of the metadata to disk. * @return status code as defined in LimeWireXMLReplyCollection */ public MetaDataState commitMetaData(){ return editor.commitMetaData(fileName, audioData); } /** * Populates the editor with the values from xmldocument. */ public void populate(LimeXMLDocument doc) { if( editor == null ) throw new NullPointerException("Editor not created"); correctDocument = doc; audioData.populate(doc); } public LimeXMLDocument getCorrectDocument() { return correctDocument; } public MetaWriter getEditor(){ return editor; } }