/*
* 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.cpp;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import com.tulskiy.musique.gui.model.TrackInfoItem;
import com.tulskiy.musique.util.FieldKeyMetaHelper;
import com.tulskiy.musique.util.Util;
/**
* @author mliauchuk
*/
public class TrackInfoItemSelection implements Transferable, ClipboardOwner {
public static final DataFlavor objectFlavor = new DataFlavor(List.class, "Musique.TrackInfoItem object");
public static final DataFlavor textFlavor = DataFlavor.stringFlavor;
private final DataFlavor[] supportedFlavors = {objectFlavor, textFlavor};
private List<TrackInfoItem> items = null;
public TrackInfoItemSelection(List<TrackInfoItem> data) {
if (data != null) {
items = new ArrayList<TrackInfoItem>(data.size());
for (TrackInfoItem item : data) {
items.add(new TrackInfoItem(item));
}
}
}
@Override
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
if (objectFlavor.equals(flavor)) {
return items;
}
else if (textFlavor.equals(flavor)) {
return toString();
}
else {
throw new UnsupportedFlavorException(flavor);
}
}
@Override
public DataFlavor[] getTransferDataFlavors() {
return supportedFlavors;
}
@Override
public boolean isDataFlavorSupported(DataFlavor flavor) {
for (DataFlavor df : supportedFlavors) {
if (df.equals(flavor)) {
return true;
}
}
return false;
}
@Override
public void lostOwnership(Clipboard clipboard, Transferable contents) {
items = null;
}
public String toString() {
if (items == null || items.isEmpty()) {
return null;
}
StringBuilder result = new StringBuilder();
boolean isNotFirst = false;
for (TrackInfoItem item : items) {
if (isNotFirst) {
result.append('\n');
}
else {
isNotFirst = true;
}
result.append(FieldKeyMetaHelper.getDisplayName(item.getKey()))
.append(" : ")
.append(Util.formatFieldValues(item.getState().getValues(), "; "));
}
return result.toString();
}
}