package org.cmc.music.metadata; import org.cmc.music.fs.SongFilenameParser; import org.cmc.music.myid3.ID3Tag; import org.cmc.music.myid3.TagFormat; public class MusicMetadataSet { public final ID3Tag.V1 id3v1Raw; public final ID3Tag.V2 id3v2Raw; public final IMusicMetadata id3v1Clean; public final IMusicMetadata id3v2Clean; public final IMusicMetadata filename; public final IMusicMetadata merged; private MusicMetadataSet(ID3Tag.V1 id3_v1_raw, ID3Tag.V2 id3_v2_raw, IMusicMetadata id3_v1_clean, IMusicMetadata id3_v2_clean, String file_name, String folder_name) { this.id3v1Raw = id3_v1_raw; this.id3v2Raw = id3_v2_raw; this.id3v1Clean = id3_v1_clean; this.id3v2Clean = id3_v2_clean; this.filename = SongFilenameParser .parseFilename(file_name, folder_name); this.merged = merge(id3v1Clean, id3v2Clean, filename); } public IMusicMetadata getSimplified() { return new MusicMetadata(merged); } public static final String newline = System.getProperty("line.separator"); public String toString() { StringBuffer result = new StringBuffer(); result.append("{ID3TagSet. "); result.append(newline); result.append("v1_raw: " + id3v1Raw); result.append(newline); result.append("v2_raw: " + id3v2Raw); result.append(newline); result.append("v1: " + id3v1Clean); result.append(newline); result.append("v2: " + id3v2Clean); result.append(newline); result.append("filename: " + filename); result.append(newline); result.append("merged: " + merged); result.append(newline); result.append(" }"); return result.toString(); } private static final void merge(IMusicMetadata dst, IMusicMetadata src) { if (src == null) return; dst.mergeValuesIfMissing(src); } private static final IMusicMetadata merge(IMusicMetadata id3v1Clean, IMusicMetadata id3v2Clean, IMusicMetadata filename) { IMusicMetadata result = new MusicMetadata("merged"); merge(result, id3v2Clean); merge(result, id3v1Clean); merge(result, filename); return result; } private static final TagFormat utils = new TagFormat(); public static final MusicMetadataSet factoryMethod(ID3Tag.V1 id3_v1_raw, ID3Tag.V2 id3_v2_raw, String filename, String folder_name) { IMusicMetadata id3_v1_clean = id3_v1_raw == null ? null : utils .process(id3_v1_raw.values); IMusicMetadata id3_v2_clean = id3_v2_raw == null ? null : utils .process(id3_v2_raw.values); return new MusicMetadataSet(id3_v1_raw, id3_v2_raw, id3_v1_clean, id3_v2_clean, filename, folder_name); } }