/* * Copyright (c) 2008, 2009, 2010 Denis Tulskiy * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * version 3 along with this work. If not, see <http://www.gnu.org/licenses/>. */ package com.tulskiy.musique.gui.model; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.Map.Entry; import org.jaudiotagger.tag.FieldKey; import com.tulskiy.musique.playlist.Track; import com.tulskiy.musique.util.Util; /** * @author mliauchuk */ public class TrackInfoItemState { private Map<Track, FieldValues> values; private boolean isUpdated; public TrackInfoItemState(FieldKey key, List<Track> tracks) { values = new LinkedHashMap<Track, FieldValues>(); for (Track track : tracks) { values.put(track, new FieldValues(track.getTrackData().getTagFieldValuesSafe(key))); } isUpdated = false; } public TrackInfoItemState(Map<Track, FieldValues> valuesOriginal, boolean isUpdatedOriginal) { values = new LinkedHashMap<Track, FieldValues>(); Set<Entry<Track, FieldValues>> entriesOriginal = valuesOriginal.entrySet(); if (entriesOriginal != null && !entriesOriginal.isEmpty()) { Iterator<Entry<Track, FieldValues>> it = entriesOriginal.iterator(); while (it.hasNext()) { Entry<Track, FieldValues> entry = it.next(); values.put(entry.getKey(), new FieldValues(entry.getValue())); } } isUpdated = isUpdatedOriginal; } public TrackInfoItemState(TrackInfoItemState state) { this(state.values, state.isUpdated); } public void clear() { for (FieldValues value : values.values()) { value.clear(); } values.clear(); } public FieldValues getValues() { FieldValues result = new FieldValues(); for (FieldValues vs : values.values()) { result.add(vs); } return result; } public FieldValues getValues(Track track) { return track == null ? getValues() : values.get(track); } public boolean isUpdated() { return isUpdated; } public void addValue(String value) { for (FieldValues vs : values.values()) { vs.add(value); } isUpdated = true; } public void addValue(String value, Track track) { if (track == null) { addValue(value); } else { FieldValues vs = values.get(track); vs.add(value); isUpdated = true; } } public void setValue(String value) { for (FieldValues vs : values.values()) { vs.clear(); vs.add(value); } isUpdated = true; } public void setValue(String value, Track track) { if (track == null) { setValue(value); } else { FieldValues vs = values.get(track); vs.clear(); vs.add(value); isUpdated = true; } } public void setValues(FieldValues values) { for (FieldValues vs : this.values.values()) { vs.clear(); vs.add(values); } isUpdated = true; } public void setValues(FieldValues values, Track track) { if (track == null) { setValues(values); } else { FieldValues vs = this.values.get(track); vs.clear(); vs.add(values); isUpdated = true; } } public boolean isMultiple() { return getValues().size() > 1; } public String toString() { return Util.formatFieldValues(getValues()); } }