TransferPanel.java
| Index Score | ||
|---|---|---|
![]() |
![]() |
xnap.gui |
![]() |
![]() |
XNap |
View: Reasons, Metrics, Source Code
These are the metrics that contribute to the Enerjy Score for this file, ranked by impact. So the metrics listed at the top influence the score to a greater extent that the metrics listed at the bottom.
/*
* Java Napster version x.yz (for current version number as well as for
* additional information see version.txt)
*
* Previous versions of this program were written by Florian Student
* and Michael Ransburg available at www.weblicity.de/jnapster and
* http://www.tux.org/~daneel/content/projects/10.shtml respectively.
*
*
* 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 2 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, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package xnap.gui;
import xnap.*;
import xnap.io.*;
import xnap.gui.table.*;
import xnap.net.*;
import xnap.util.*;
import xnap.gui.event.*;
import java.awt.*;
import java.beans.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import java.awt.event.*;
import java.lang.Math;
import java.io.File;
public class TransferPanel extends AbstractPanel implements FileCollector
{
//--- Data field(s) ---
private JTabbedPane jtp;
private SortableTableModel dlSorter;
private JTable jtaDownloads;
private TransferTableModel ttmDownloads;
private JScrollPane jspDl;
private SortableTableModel ulSorter;
private JTable jtaUploads;
private TransferTableModel ttmUploads;
private JScrollPane jspUl;
private SortableTableModel parSorter;
private JTable jtaPartials;
private ResumeTableModel rtmPartials;
private JScrollPane jspPar;
private AbortAction abortAction = new AbortAction();
private ClearAction clearAction = new ClearAction();
// private RetryAction retryAction = new RetryAction();
private ResumeAction resumeAction = new ResumeAction(this);
private DeleteFileAction deleteFileAction = new DeleteFileAction();
private OpenFileAction openFileAction = new OpenFileAction(this);
private OpenFileWithAction openFileWithAction = new OpenFileWithAction(this);
//--- Constructor(s) ---
public TransferPanel() {
super();
initialize();
}
private void initialize() {
/* top panel */
JPanel jpaTop = new JPanel();
jpaTop.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
JButton jbAbort = new JButton(abortAction);
jpaTop.add(jbAbort);
JButton jbClear = new JButton(clearAction);
jpaTop.add(jbClear);
/* context menu */
JPopupMenu popup = new JPopupMenu();
popup.add(abortAction);
// popup.add(retryAction);
popup.add(openFileAction);
popup.add(openFileWithAction);
popup.addSeparator();
popup.add(clearAction);
// /* download table */
// ttmDownloads = new TransferTableModel();
// ttmDownloads.setMaxTransfers(prefs.getMaxDownloads());
// dlSorter = new SortableTableModel(ttmDownloads);
// jtaDownloads = new JTable(dlSorter);
// jtaDownloads.setShowGrid(false);
// dlSorter.addMouseListenerToHeaderInTable(jtaDownloads);
// MouseListener plDownloads = new PopupListener(popup);
// jtaDownloads.addMouseListener(plDownloads);
// alignColumns(jtaDownloads);
// jspDl = new JScrollPane();
// jspDl.setViewportView(jtaDownloads);
/* upload table */
ttmUploads = new TransferTableModel();
ttmUploads.setMaxTransfers(prefs.getMaxUploads());
ulSorter = new SortableTableModel(ttmUploads);
jtaUploads = new JTable(ulSorter);
jtaUploads.setShowGrid(false);
ulSorter.addMouseListenerToHeaderInTable(jtaUploads);
MouseListener plUploads = new PopupListener(popup);
jtaUploads.addMouseListener(plUploads);
alignColumns(jtaUploads);
jspUl = new JScrollPane();
jspUl.setViewportView(jtaUploads);
/* resume table */
rtmPartials = new ResumeTableModel();
parSorter = new SortableTableModel(rtmPartials);
jtaPartials = new JTable(parSorter);
jtaPartials.setShowGrid(false);
parSorter.addMouseListenerToHeaderInTable(jtaPartials);
/* resume table has its own context menu */
JPopupMenu rpopup = new JPopupMenu();
rpopup.add(resumeAction);
rpopup.add(abortAction);
rpopup.addSeparator();
rpopup.add(openFileAction);
rpopup.add(openFileWithAction);
rpopup.add(deleteFileAction);
MouseListener plPartials = new PopupListener(rpopup);
jtaPartials.addMouseListener(plPartials);
alignColumns(jtaPartials);
jspPar = new JScrollPane();
jspPar.setViewportView(jtaPartials);
/* split panel */
/*
JSplitPane jsp = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
jsp.add(jspDl, JSplitPane.TOP);
jsp.add(jspUl, JSplitPane.BOTTOM);
jsp.setDividerLocation(150);
*/
/* tabbed pane */
jtp = new JTabbedPane();
//jtp.addTab("Downloads", jspDl);
jtp.addTab("Downloads", jspPar);
jtp.addTab("Uploads", jspUl);
/* content */
setLayout(new java.awt.BorderLayout());
//add(jpaTop, "North");
add(jtp, "Center");
}
private void alignColumns(JTable jta) {
NumberCellRenderer ncr = new NumberCellRenderer();
NumberCellRenderer progressNcr = new NumberCellRenderer();
NumberCellRenderer rateNcr = new NumberCellRenderer();
TimeCellRenderer tcr = new TimeCellRenderer();
TableColumn column;
progressNcr.setAppend("%");
rateNcr.setAppend(" kb/s");
column = jta.getColumn("Filename");
column.setPreferredWidth(400);
column = jta.getColumn("Size (kb)");
column.setCellRenderer(ncr);
column = jta.getColumn("Progress");
column.setCellRenderer(progressNcr);
column = jta.getColumn("Rate");
column.setCellRenderer(rateNcr);
column = jta.getColumn("Time Left");
column.setCellRenderer(tcr);
}
public void propertyChange(PropertyChangeEvent e)
{
super.propertyChange(e);
String p = e.getPropertyName();
if (e.getSource() == prefs) {
if (e.getPropertyName().equals("maxDownloads")) {
ttmDownloads.setMaxTransfers(prefs.getMaxDownloads());
}
else if (e.getPropertyName().equals("maxUploads")) {
ttmUploads.setMaxTransfers(prefs.getMaxUploads());
}
}
}
public File[] getFiles()
{
JTable jta = getSelectedTable();
int rowC = jta.getSelectedRowCount();
if (rowC == 0) {
setStatus("Please select something first");
return null;
}
int[] rows = jta.getSelectedRows();
File[] files = new File[rowC];
SortableTableModel sorter = (SortableTableModel)jta.getModel();
if (jta == jtaPartials)
for (int i = 0; i < rowC; i++) {
final int x = sorter.mapToDtmIndex(rows[i]);
files[i] = rtmPartials.getTransferAt(x).getFile();
}
else {
TransferTableModel model = (TransferTableModel) sorter.getModel();
for (int i = 0; i < rowC; i++) {
final int x = sorter.mapToDtmIndex(rows[i]);
files[i] = model.getTransferAt(x).getFile();
}
}
return files;
}
public AbstractAction[] getActions()
{
return (new AbstractAction[] { abortAction, resumeAction, clearAction,
openFileAction });
}
public DownloadCollector getDownloadCollector()
{
return ttmDownloads;
}
public UploadHandler getUploadHandler()
{
return ttmUploads;
}
/**
* Return the active table.
*/
private JTable getSelectedTable() {
if (jtp.getSelectedComponent() == jspDl)
return jtaDownloads;
else if (jtp.getSelectedComponent() == jspUl)
return jtaUploads;
else if (jtp.getSelectedComponent() == jspPar)
return jtaPartials;
else
return null;
}
/**
* Aborts all selected transfers.
*/
private class AbortAction extends AbstractAction {
public AbortAction() {
putValue(Action.NAME, "Abort");
putValue(Action.SHORT_DESCRIPTION,
"Abort the selected transfer(s)");
putValue(Action.SMALL_ICON, XNap.getIcon("stop.png"));
putValue(Action.MNEMONIC_KEY, new Integer('A'));
putValue(Action.ACCELERATOR_KEY, new Integer('A'));
}
public void actionPerformed(ActionEvent event)
{
JTable jta = getSelectedTable();
int rowC = jta.getSelectedRowCount();
if (rowC == 0) {
setStatus("Please select something first");
return;
}
int[] rows = jta.getSelectedRows();
SortableTableModel sorter = (SortableTableModel)jta.getModel();
if (jta == jtaPartials)
for (int i = 0; i < rowC; i++) {
final int x = sorter.mapToDtmIndex(rows[i]);
rtmPartials.getTransferAt(x).abort();
rtmPartials.fireTableRowsUpdated(x, x);
}
else {
TransferTableModel model = (TransferTableModel) sorter.getModel();
for (int i = 0; i < rowC; i++) {
final int x = sorter.mapToDtmIndex(rows[i]);
model.getTransferAt(x).abort();
model.fireTableRowsUpdated(x, x);
}
}
}
}
/**
* Clears all finished transfers.
*/
private class ClearAction extends AbstractAction {
public ClearAction()
{
putValue(Action.NAME, "Clear finished");
putValue(Action.SHORT_DESCRIPTION,
"Clear all finished transfer(s)");
putValue(Action.SMALL_ICON, XNap.getIcon("edittrash.png"));
putValue(Action.MNEMONIC_KEY, new Integer('C'));
putValue(Action.ACCELERATOR_KEY, new Integer('C'));
}
public void actionPerformed(ActionEvent event)
{
JTable jta = getSelectedTable();
if (jta == jtaPartials)
rtmPartials.clearFinished();
else {
SortableTableModel sorter = (SortableTableModel)jta.getModel();
TransferTableModel model =
(TransferTableModel) sorter.getModel();
model.clearFinished();
}
}
}
private class RetryAction extends AbstractAction
{
public RetryAction()
{
putValue(Action.NAME, "Retry Download");
putValue(Action.SHORT_DESCRIPTION,
"Trie to start download anew");
putValue(Action.SMALL_ICON, XNap.getIcon("reload.png"));
putValue(Action.MNEMONIC_KEY, new Integer('R'));
putValue(Action.ACCELERATOR_KEY, new Integer('R'));
}
public void actionPerformed(ActionEvent event)
{
JTable jta = getSelectedTable();
SortableTableModel sorter = (SortableTableModel)jta.getModel();
TransferTableModel model = (TransferTableModel)sorter.getModel();
if (jta.getSelectedRowCount() == 0)
setStatus("Please select something first");
else {
int[] rows = jta.getSelectedRows();
for (int i = 0; i < rows.length; i++) {
int x = sorter.mapToDtmIndex(rows[i]);
if (model.getTransferAt(x) instanceof AbstractDownload) {
AbstractDownload d
= (AbstractDownload)model.getTransferAt(x);
if (d.isRunning())
setStatus("Download still in progress");
else
model.retry(x);
}
else
setStatus("Can only retry downloads");
}
}
}
}
private class ResumeAction extends AbstractAction
{
private Component parent;
public ResumeAction(Component parent)
{
this.parent = parent;
putValue(Action.NAME, "Resume");
putValue(Action.SHORT_DESCRIPTION,
"Resume download");
putValue(Action.SMALL_ICON, XNap.getIcon("reload.png"));
putValue(Action.MNEMONIC_KEY, new Integer('R'));
putValue(Action.ACCELERATOR_KEY, new Integer('R'));
}
public void actionPerformed(ActionEvent event)
{
if (jtaPartials.getSelectedRowCount() == 0)
setStatus("Please select something first");
else {
int[] rows = jtaPartials.getSelectedRows();
for (int i = 0; i < rows.length; i++) {
int x = parSorter.mapToDtmIndex(rows[i]);
IncompleteFile f = rtmPartials.getIncompleteFile(x);
if (f.getSearchText().equals("")) {
String guess = f.getFilename();
try {
guess = guess.substring(0, guess.lastIndexOf("."));
}
catch (StringIndexOutOfBoundsException e) {
}
guess = guess.toLowerCase();
guess = guess.replace('-', ' ');
guess = guess.replace('-', ' ');
guess = guess.replace('(', ' ');
guess = guess.replace(')', ' ');
guess = guess.replace('.', ' ');
for (int k=0; k<guess.length(); k++){
Character chr = new Character(guess.charAt(k));
StringBuffer strb = new StringBuffer(guess);
if (chr.isDigit(guess.charAt(k))){
strb.setCharAt(k,' ');
}
guess = strb.toString();
}
String searchText
= (String) JOptionPane.showInputDialog
(TransferPanel.this,
"Enter search keys for \""
+ f.getFilename() + "\"",
"Search Dialog",
JOptionPane.QUESTION_MESSAGE,
null, null, guess);
if (searchText != null) {
f.setSearchText(searchText);
f.resume();
}
}
else
f.resume();
}
}
}
}
/**
* private class for resume table.
*/
private class DeleteFileAction extends AbstractAction
{
public DeleteFileAction()
{
putValue(Action.NAME, "Delete");
putValue(Action.SHORT_DESCRIPTION,
"Delete incomplete file");
putValue(Action.SMALL_ICON, XNap.getIcon("editdelete.png"));
putValue(Action.MNEMONIC_KEY, new Integer('D'));
putValue(Action.ACCELERATOR_KEY, new Integer('D'));
}
public void actionPerformed(ActionEvent event)
{
if (jtaPartials.getSelectedRowCount() == 0) {
setStatus("Please select something first");
return;
}
AbstractTransfer[] transfers = getSelectedTransfers();
rtmPartials.deleteIncompleteTransfers(transfers);
}
}
protected AbstractTransfer[] getSelectedTransfers()
{
JTable jta = getSelectedTable();
SortableTableModel sorter = (SortableTableModel)jta.getModel();
ResumeTableModel model = (ResumeTableModel)sorter.getModel();
int[] rows = jta.getSelectedRows();
AbstractTransfer[] transfers = new AbstractTransfer[rows.length];
for (int i = 0; i < rows.length; i++) {
int x = sorter.mapToDtmIndex(rows[i]);
transfers[i] = model.getTransferAt(x);
}
return transfers;
}
}
The table below shows all metrics for TransferPanel.java.




