Java tutorial
/* * Created by Angel Leon (@gubatron), Alden Torres (aldenml) * Copyright (c) 2011-2014, FrostWire(R). All rights reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.frostwire.gui.library; import java.io.File; import java.util.ArrayList; import java.util.List; import org.apache.commons.io.FilenameUtils; import org.limewire.util.StringUtils; import com.frostwire.alexandria.PlaylistItem; import com.frostwire.gui.player.MediaPlayer; import com.limegroup.gnutella.gui.I18n; import com.limegroup.gnutella.gui.tables.LimeTableColumn; import com.limegroup.gnutella.gui.tables.NameHolder; import com.limegroup.gnutella.gui.tables.SizeHolder; public final class LibraryPlaylistsTableDataLine extends AbstractLibraryTableDataLine<PlaylistItem> { /** * sort index column */ static final int SORT_INDEX_IDX = 0; private static final LimeTableColumn SORT_INDEX_COLUMN = new LimeTableColumn(SORT_INDEX_IDX, "PLAYLIST_TABLE_SORT_INDEX", I18n.tr("Index"), 30, true, false, false, PlaylistItemStringProperty.class); static final int ACTIONS_IDX = 1; private static final LimeTableColumn ACTIONS_COLUMN = new LimeTableColumn(ACTIONS_IDX, "PLAYLIST_TABLE_ACTIONS", I18n.tr("Actions"), 36, true, false, false, LibraryActionsHolder.class); /** * Starred column */ static final int STARRED_IDX = 2; private static final LimeTableColumn STARRED_COLUMN = new LimeTableColumn(STARRED_IDX, "PLAYLIST_TABLE_STARRED", I18n.tr("Starred"), 20, true, false, false, PlaylistItemStarProperty.class); /** * Title column */ static final int TITLE_IDX = 3; private static final LimeTableColumn TITLE_COLUMN = new LimeTableColumn(TITLE_IDX, "PLAYLIST_TABLE_TITLE", I18n.tr("Title"), 80, true, NameHolder.class); /** * Artist column */ static final int ARTIST_IDX = 4; private static final LimeTableColumn ARTIST_COLUMN = new LimeTableColumn(ARTIST_IDX, "PLAYLIST_TABLE_ARTIST", I18n.tr("Artist"), 80, true, PlaylistItemStringProperty.class); /** * Length column (in hour:minutes:seconds format) */ static final int LENGTH_IDX = 5; private static final LimeTableColumn LENGTH_COLUMN = new LimeTableColumn(LENGTH_IDX, "PLAYLIST_TABLE_LENGTH", I18n.tr("Length"), 150, true, PlaylistItemStringProperty.class); /** * Album column */ static final int ALBUM_IDX = 6; private static final LimeTableColumn ALBUM_COLUMN = new LimeTableColumn(ALBUM_IDX, "PLAYLIST_TABLE_ALBUM", I18n.tr("Album"), 120, true, PlaylistItemStringProperty.class); /** * Track column */ static final int TRACK_IDX = 7; private static final LimeTableColumn TRACK_COLUMN = new LimeTableColumn(TRACK_IDX, "PLAYLIST_TABLE_TRACK", I18n.tr("Track"), 20, true, PlaylistItemTrackProperty.class); /** * Genre column */ static final int GENRE_IDX = 8; private static final LimeTableColumn GENRE_COLUMN = new LimeTableColumn(GENRE_IDX, "PLAYLIST_TABLE_GENRE", I18n.tr("Genre"), 80, true, PlaylistItemStringProperty.class); /** * Bitrate column info */ static final int BITRATE_IDX = 9; private static final LimeTableColumn BITRATE_COLUMN = new LimeTableColumn(BITRATE_IDX, "PLAYLIST_TABLE_BITRATE", I18n.tr("Bitrate"), 60, true, PlaylistItemBitRateProperty.class); /** * Comment column info */ static final int COMMENT_IDX = 10; private static final LimeTableColumn COMMENT_COLUMN = new LimeTableColumn(COMMENT_IDX, "PLAYLIST_TABLE_COMMENT", I18n.tr("Comment"), 20, false, PlaylistItemStringProperty.class); /** * Size column (in bytes) */ static final int SIZE_IDX = 11; private static final LimeTableColumn SIZE_COLUMN = new LimeTableColumn(SIZE_IDX, "PLAYLIST_TABLE_SIZE", I18n.tr("Size"), 80, false, PlaylistItemStringProperty.class); /** * TYPE column */ static final int TYPE_IDX = 12; private static final LimeTableColumn TYPE_COLUMN = new LimeTableColumn(TYPE_IDX, "PLAYLIST_TABLE_TYPE", I18n.tr("Type"), 40, true, PlaylistItemStringProperty.class); /** * Year column */ static final int YEAR_IDX = 13; private static final LimeTableColumn YEAR_COLUMN = new LimeTableColumn(YEAR_IDX, "PLAYLIST_TABLE_YEAR", I18n.tr("Year"), 30, false, PlaylistItemStringProperty.class); /** * Total number of columns */ static final int NUMBER_OF_COLUMNS = 14; /** * Number of columns */ public int getColumnCount() { return NUMBER_OF_COLUMNS; } /** * Coverts the size of the PlayListItem into readable form postfixed with * Kb or Mb */ private SizeHolder sizeHolder; private boolean exists; private String bitrate; /** * Sets up the dataline for use with the playlist. */ public void initialize(PlaylistItem item) { super.initialize(item); sizeHolder = new SizeHolder(item.getFileSize()); exists = new File(item.getFilePath()).exists(); bitrate = initializer.getTrackBitrate(); if (bitrate != null && bitrate.length() > 0 && !bitrate.endsWith(" kbps")) { bitrate = bitrate + " kbps"; } this.nameCell = new NameHolder(initializer.getTrackTitle()); this.actionsHolder = new LibraryActionsHolder(this, false); } private NameHolder nameCell; private LibraryActionsHolder actionsHolder; /** * Returns the value for the specified index. */ public Object getValueAt(int idx) { boolean playing = isPlaying(); switch (idx) { case SORT_INDEX_IDX: return new PlaylistItemIntProperty(this, initializer.getSortIndex(), playing, exists); case ACTIONS_IDX: actionsHolder.setPlaying(playing); return actionsHolder; case STARRED_IDX: return new PlaylistItemStarProperty(this, playing, exists); case ALBUM_IDX: return new PlaylistItemStringProperty(this, initializer.getTrackAlbum(), playing, exists); case ARTIST_IDX: return new PlaylistItemStringProperty(this, initializer.getTrackArtist(), playing, exists); case BITRATE_IDX: return new PlaylistItemBitRateProperty(this, bitrate, playing, exists); case COMMENT_IDX: return new PlaylistItemStringProperty(this, initializer.getTrackComment(), playing, exists); case GENRE_IDX: return new PlaylistItemStringProperty(this, initializer.getTrackGenre(), playing, exists); case LENGTH_IDX: return new PlaylistItemStringProperty(this, LibraryUtils.getSecondsInDDHHMMSS((int) initializer.getTrackDurationInSecs()), playing, exists); case SIZE_IDX: return new PlaylistItemStringProperty(this, sizeHolder.toString(), playing, exists); case TITLE_IDX: return nameCell; case TRACK_IDX: return new PlaylistItemTrackProperty(this, initializer.getTrackNumber(), playing, exists); case TYPE_IDX: return new PlaylistItemStringProperty(this, initializer.getFileExtension(), playing, exists); case YEAR_IDX: return new PlaylistItemStringProperty(this, initializer.getTrackYear(), playing, exists); } return null; } private boolean isPlaying() { if (initializer != null) { return MediaPlayer.instance().isThisBeingPlayed(initializer); } return false; } /** * Return the table column for this index. */ public LimeTableColumn getColumn(int idx) { switch (idx) { case SORT_INDEX_IDX: return SORT_INDEX_COLUMN; case ACTIONS_IDX: return ACTIONS_COLUMN; case STARRED_IDX: return STARRED_COLUMN; case ALBUM_IDX: return ALBUM_COLUMN; case ARTIST_IDX: return ARTIST_COLUMN; case BITRATE_IDX: return BITRATE_COLUMN; case COMMENT_IDX: return COMMENT_COLUMN; case GENRE_IDX: return GENRE_COLUMN; case LENGTH_IDX: return LENGTH_COLUMN; case SIZE_IDX: return SIZE_COLUMN; case TITLE_IDX: return TITLE_COLUMN; case TRACK_IDX: return TRACK_COLUMN; case TYPE_IDX: return TYPE_COLUMN; case YEAR_IDX: return YEAR_COLUMN; } return null; } public boolean isClippable(int idx) { return false; } public int getTypeAheadColumn() { return STARRED_IDX; } public boolean isDynamic(int idx) { return false; } /** * @return the PlayListItem for this table row */ public PlaylistItem getPlayListItem() { return initializer; } /** * Creates a tool tip for each row of the playlist. Tries to grab any information * that was extracted from the Meta-Tag or passed in to the PlaylistItem as * a property map */ public String[] getToolTipArray(int col) { List<String> list = new ArrayList<String>(); if (!StringUtils.isNullOrEmpty(initializer.getTrackTitle(), true)) { list.add(I18n.tr("Title") + ": " + initializer.getTrackTitle()); } if (!StringUtils.isNullOrEmpty(initializer.getTrackNumber(), true)) { list.add(I18n.tr("Track") + ": " + initializer.getTrackNumber()); } list.add(I18n.tr("Duration") + ": " + LibraryUtils.getSecondsInDDHHMMSS((int) initializer.getTrackDurationInSecs())); if (!StringUtils.isNullOrEmpty(initializer.getTrackArtist(), true)) { list.add(I18n.tr("Artist") + ": " + initializer.getTrackArtist()); } if (!StringUtils.isNullOrEmpty(initializer.getTrackAlbum(), true)) { list.add(I18n.tr("Album") + ": " + initializer.getTrackAlbum()); } if (!StringUtils.isNullOrEmpty(initializer.getTrackGenre(), true)) { list.add(I18n.tr("Genre") + ": " + initializer.getTrackGenre()); } if (!StringUtils.isNullOrEmpty(initializer.getTrackYear(), true)) { list.add(I18n.tr("Year") + ": " + initializer.getTrackYear()); } if (!StringUtils.isNullOrEmpty(initializer.getTrackComment(), true)) { list.add(I18n.tr("Comment") + ": " + initializer.getTrackComment()); } if (list.size() == 1) { if (!StringUtils.isNullOrEmpty(initializer.getFileName(), true)) { list.add(I18n.tr("File") + ": " + initializer.getFileName()); } if (!StringUtils.isNullOrEmpty(initializer.getFilePath(), true)) { list.add(I18n.tr("Folder") + ": " + FilenameUtils.getPath(initializer.getFilePath())); } if (!StringUtils.isNullOrEmpty(initializer.getTrackBitrate(), true)) { list.add(I18n.tr("Bitrate") + ": " + initializer.getTrackBitrate()); } } return list.toArray(new String[0]); } public File getFile() { return new File(initializer.getFilePath()); } }