/* * The GPLv3 licence : * ----------------- * Copyright (c) 2009 Ricardo Dias * * This file is part of MuVis. * * MuVis 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. * * MuVis 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 MuVis. If not, see <http://www.gnu.org/licenses/>. */ package muvis.view.table.actions; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import javax.swing.JMenuItem; import javax.swing.JTable; import muvis.Environment; import muvis.Messages; import muvis.filters.SimilarityTableFilter; import muvis.similarity.SimilarityManager; import muvis.view.SimilarElementsView; import muvis.view.main.filters.NoFilter; import muvis.view.main.filters.TreemapSimilarityFilter; /** * Find similar Elements (tracks, albums, artists) common action * @author Ricardo */ public class FindSimilarElementsTableAction implements ActionListener { protected JTable tracksTable; public FindSimilarElementsTableAction(JTable tracksTable) { this.tracksTable = tracksTable; } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() instanceof JMenuItem) { JMenuItem item = (JMenuItem) e.getSource(); final ArrayList<Integer> tracks = new ArrayList(); final int[] trackIds = tracksTable.getSelectedRows(); if (item.getText().contains(Messages.TRACK_NAME_LABEL)) { //searching for similar tracks final SimilarElementsView similarityDialog = new SimilarElementsView(Environment.getEnvironmentInstance().getRootFrame(), Messages.FIND_SIMILAR_TRACKS_LABEL); ActionListener filter = new ActionListener() { @Override @SuppressWarnings("empty-statement") public void actionPerformed(ActionEvent e) { int numSimilarElements = similarityDialog.getNumberSimilarElements(); tracks.addAll(SimilarityManager.getSimilarTracks(trackIds, numSimilarElements, SimilarityManager.SimilarityMode.SIMILAR)); } }; similarityDialog.addFilterListener(filter); similarityDialog.setVisible(true); } else if (item.getText().contains(Messages.ALBUM_NAME_LABEL)) { //searching for similar albums final SimilarElementsView similarityDialog = new SimilarElementsView(Environment.getEnvironmentInstance().getRootFrame(), Messages.FIND_SIMILAR_ALBUMS_LABEL); ActionListener filter = new ActionListener() { @Override @SuppressWarnings("empty-statement") public void actionPerformed(ActionEvent e) { int numSimilarElements = similarityDialog.getNumberSimilarElements(); tracks.addAll(SimilarityManager.getSimilarAlbums(trackIds, numSimilarElements, SimilarityManager.SimilarityMode.SIMILAR)); } }; similarityDialog.addFilterListener(filter); similarityDialog.setVisible(true); } else if (item.getText().contains(Messages.ARTIST_NAME_LABEL)) { //searching for similar artists final SimilarElementsView similarityDialog = new SimilarElementsView(Environment.getEnvironmentInstance().getRootFrame(), Messages.FIND_SIMILAR_ARTISTS_LABEL); ActionListener filter = new ActionListener() { @Override @SuppressWarnings("empty-statement") public void actionPerformed(ActionEvent e) { int numSimilarElements = similarityDialog.getNumberSimilarElements(); tracks.addAll(SimilarityManager.getSimilarArtists(trackIds, numSimilarElements, SimilarityManager.SimilarityMode.SIMILAR)); } }; similarityDialog.addFilterListener(filter); similarityDialog.setVisible(true); } TreemapSimilarityFilter similarityFilter = new TreemapSimilarityFilter(new NoFilter(), tracks); Environment.getEnvironmentInstance().getTreemapFilterManager().addTreemapFilter(similarityFilter); Environment.getEnvironmentInstance().getTreemapFilterManager().filter(); SimilarityTableFilter tableFilter = new SimilarityTableFilter(tracks); Environment.getEnvironmentInstance().getTableFilterManager().addTableFilter(tableFilter); Environment.getEnvironmentInstance().getTableFilterManager().filter(); } } }