package com.robonobo.gui.model; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.regex.Matcher; import java.util.regex.Pattern; import ca.odell.glazedlists.gui.TableFormat; import com.robonobo.common.util.FileUtil; import com.robonobo.common.util.TimeUtil; import com.robonobo.core.api.model.Stream; import com.robonobo.core.api.model.Track; class TrackTableFormat implements TableFormat<Track> { static DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm"); Pattern firstNumPat = Pattern.compile("^\\s*(\\d*).*$"); String[] colNames = { " "/* StatusIcon */, "Title", "Artist", "Album", "Track", "Year", "Time", "Size", "Status", "Download", "Upload", "Added to Library", "Stream Id" }; public int getColumnCount() { return colNames.length; } @Override public String getColumnName(int col) { return colNames[col]; } @Override public Object getColumnValue(Track t, int col) { Stream s = t.getStream(); switch (col) { case 0: return t.getPlaybackStatus(); case 1: return s.getTitle(); case 2: return s.getAttrValue("artist"); case 3: return s.getAttrValue("album"); case 4: return getTrackNumber(s); case 5: return s.getAttrValue("year"); case 6: return TimeUtil.minsSecsFromMs(s.getDuration()); case 7: return FileUtil.humanReadableSize(s.getSize()); case 8: return t.getTransferStatus(); case 9: int rate = t.getDownloadRate(); if (rate == 0) { return null; } return FileUtil.humanReadableSize(rate) + "/s"; case 10: rate = t.getUploadRate(); if (rate == 0) { return null; } return FileUtil.humanReadableSize(rate) + "/s"; case 11: return t.getDateAdded(); case 12: return s.getStreamId(); } return null; } Integer getTrackNumber(Stream s) { String trackStr = s.getAttrValue("track"); if (trackStr == null || trackStr.length() == 0) return null; Matcher m = firstNumPat.matcher(trackStr); if (!m.matches()) return null; return Integer.parseInt(m.group(1)); } }