SearchSubPanel.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.gui.table.*;
import xnap.net.*;
import xnap.net.gift.*;
// import xnap.net.limewire.*;
import xnap.net.nap.*;
import xnap.util.*;
import java.awt.*;
import java.beans.*;
import java.util.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
import javax.swing.table.*;
import java.awt.event.*;
import java.io.*;
public class SearchSubPanel extends JPanel implements PropertyChangeListener {
//--- Data field(s) ---
private Preferences prefs = Preferences.getInstance();
private SearchPanel parent;
private DownloadCollector downloadCollector;
private ObservableVector servers = null;
private String status = "";
private String errStatus = "";
private JTable jta;
private SearchTableModel stm;
private SortableTableModel sorter;
private JPanel jpa;
private JScrollPane jsp;
private JLabel jlMyStatus;
private int serverCount;
private int finishedCount;
private int failedCount;
private String searchText;
//--- Constructor(s) ---
public SearchSubPanel(SearchPanel parent,
ObservableVector servers,
DownloadCollector downloadCollector) {
this.parent = parent;
this.servers = servers;
this.downloadCollector = downloadCollector;
initialize();
}
//--- Method(s) ---
private void initialize() {
/* status */
JPanel jpTop = new JPanel(new BorderLayout());
jlMyStatus = new JLabel("");
jpTop.add(jlMyStatus, "Center");
/*
JButton jbClose = new JButton(new CloseAction());
jbClose.setBorder(new EmptyBorder(0, 0, 0, 0));
jpTop.add(jbClose, "East");
*/
/* table */
stm = new SearchTableModel();
sorter = new SortableTableModel(stm);
jta = new JTable(sorter);
jta.setShowGrid(false);
sorter.addMouseListenerToHeaderInTable(jta);
MouseListener popupListener = new PopupListener(parent.getPopupMenu());
jta.addMouseListener(popupListener);
jta.addMouseListener(new DownloadMouseListener());
DownloadAction downloadAction = new DownloadAction();
jta.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0),
downloadAction);
jta.getActionMap().put(downloadAction, downloadAction);
alignColumns();
jsp = new JScrollPane();
jsp.setViewportView(jta);
/* content */
setLayout(new java.awt.BorderLayout());
add(jpTop, "North");
add(jsp, "Center");
}
private void alignColumns() {
NumberCellRenderer ncr = new NumberCellRenderer();
NumberCellRenderer dcr = new NumberCellRenderer(1);
TimeCellRenderer tcr = new TimeCellRenderer();
LinkSpeedCellRenderer lcr = new LinkSpeedCellRenderer();
TableColumn column;
column = jta.getColumn("Filename");
column.setPreferredWidth(300);
column = jta.getColumn("Filesize");
column.setCellRenderer(ncr);
column = jta.getColumn("Bitrate");
column.setCellRenderer(ncr);
/*
column = jta.getColumn("Frequency");
column.setCellRenderer(dcr);
*/
column = jta.getColumn("Length");
column.setCellRenderer(tcr);
column = jta.getColumn("Link Speed");
column.setCellRenderer(lcr);
/*
column = jta.getColumn("Ping");
column.setCellRenderer(ncr);
column = jta.getColumn("Port");
column.setCellRenderer(ncr);
*/
}
public void doBrowse()
{
int rowindex = jta.getSelectedRow();
if (rowindex == -1) {
setStatus("Please select a row first.");
}
else {
int x = sorter.mapToDtmIndex(rowindex);
parent.doBrowse(stm.getRow(x));
}
}
public void doCheck()
{
int rowC = jta.getSelectedRowCount();
if (rowC == 0) {
setStatus("Please select a row first.");
}
else {
int[] rows = jta.getSelectedRows();
for (int i = 0; i < rowC; i++) {
final int x = sorter.mapToDtmIndex(rows[i]);
AbstractDownload d
= stm.getRow(x).getDownload(null, null, false);
d.setCheckOnly(true);
d.start();
}
}
}
public void doDownload()
{
int[] rows = jta.getSelectedRows();
if (rows.length == 0) {
setStatus("Please select a row first.");
}
else {
for (int i = 0; i < rows.length; i++) {
int x = sorter.mapToDtmIndex(rows[i]);
long size = stm.getRow(x).getFilesize();
String name = Filename.uniqueFilename(prefs.getIncompleteDir()
+ stm.getRow(x).getShortFilename(),
String.valueOf(size));
File f = new File(name);
try {
Debug.log("Created " + f);
f.createNewFile();
}
catch (IOException e) {
}
IncompleteFile ifile =
new IncompleteFile(f, stm.getRow(x).getFilesize(),
stm.getRow(x), searchText);
ResumeScheduler.getInstance().add(ifile);
ifile.resume();
}
}
}
public void browseRequest(AbstractSearchResult sr)
{
this.searchText = sr.getUser();
AbstractSearch b = sr.getBrowse(stm, prefs.getMaxSearchResults());
b.addPropertyChangeListener(this);
(new Thread(b)).start();
setMyStatus("Receiving list of files...");
}
public void searchRequest(String searchText, int compare, String bitrate,
int mediaType)
{
this.searchText = searchText;
Preferences prefs = Preferences.getInstance();
Server s;
HashSet set = new HashSet();
int busyServers = 0;
/* create specific search filter */
AbstractSearchFilter filter = new AbstractSearchFilter(searchText,
compare,
bitrate,
mediaType);
serverCount = 0;
finishedCount = 0;
failedCount = 0;
/* giFT search */
AbstractSearch giFTSearch
= new xnap.net.gift.Search(filter, prefs.getMaxSearchResults(), stm,
prefs.getGiftHost(), prefs.getGiftPort());
giFTSearch.addPropertyChangeListener(this);
(new Thread(giFTSearch)).start();
serverCount++;
/* gnutella search via limewire */
// filter = new xnap.net.limewire.SearchFilter(searchText, mediaType,
// true);
// if (prefs.getUseLimewire()) {
// AbstractSearch gnutellaSearch
// = new xnap.net.limewire.Search(filter,
// prefs.getMaxSearchResults(),
// stm);
// gnutellaSearch.addPropertyChangeListener(this);
// (new Thread(gnutellaSearch)).start();
// }
/* nap search */
filter = new xnap.net.nap.SearchFilter(searchText, compare, bitrate,
mediaType, true);
for (int i = 0; (i < servers.size()
&& (prefs.getMaxSearchServers() == 0
|| serverCount < prefs.getMaxSearchServers()));
i++) {
s = (Server)servers.get(i);
if (s.getStatus() == Server.STATUS_CONNECTED)
{
if (s.getNetwork().equals("")
|| set.add(s.getNetwork()))
{
xnap.net.nap.Search search = new xnap.net.nap.Search
(filter, prefs.getMaxSearchResults(), stm, s);
search.addPropertyChangeListener(this);
(new Thread(search)).start();
serverCount++;
}
}
if (s.getStatus() == Server.STATUS_BUSY)
busyServers++;
}
if (serverCount == 1)
{
if (busyServers > 0)
errStatus += ", All OpenNap servers busy";
else
errStatus += ", Not connected to OpenNap server";
}
setMyStatus("Searching " + serverCount + " server(s)" + errStatus);
}
public void setDownloadCollector(DownloadCollector newValue)
{
downloadCollector = newValue;
}
public void setMyStatus(String newValue)
{
jlMyStatus.setText(newValue);
}
public String getStatus() {
return status;
}
public synchronized void setStatus(String newValue) {
String oldValue = status;
status = newValue;
firePropertyChange("status", oldValue, newValue);
}
/**
*
*/
public void propertyChange(PropertyChangeEvent e)
{
if (e.getSource() instanceof AbstractSearch)
{
AbstractSearch s = (AbstractSearch)e.getSource();
if (s.getStatus() == AbstractSearch.STATUS_FAILED) {
failedCount++;
errStatus += ", " + s.getStatusText();
}
else if (s.getStatus() == AbstractSearch.STATUS_FINISHED)
finishedCount++;
else
return;
int p = serverCount - finishedCount - failedCount;
if (p > 0) {
String msg = "Server(s): " + finishedCount + " finished, "
+ failedCount + " failed, "
+ p + " pending" + errStatus;
setMyStatus(msg + errStatus);
} else
setMyStatus("Finished: received "
+ stm.getRowCount() + " result(s)" + errStatus);
setTitle(searchText + " (" + stm.getRowCount() + ")");
s.removePropertyChangeListener(this);
}
}
private void setTitle(String newValue)
{
if (getParent() instanceof JTabbedPane) {
JTabbedPane p = (JTabbedPane)getParent();
int i = p.indexOfComponent(this);
p.setTitleAt(i, newValue);
}
}
// --- Class(es) ---
class DownloadMouseListener extends MouseAdapter {
public void mousePressed(MouseEvent e) {
if (e.getClickCount() == 2) {
int row = jta.rowAtPoint(e.getPoint());
if(row > -1)
{
jta.getSelectionModel()
.setSelectionInterval(row, row);
doDownload();
}
}
}
}
class DownloadAction extends AbstractAction {
public void actionPerformed(ActionEvent e) {
doDownload();
int i = jta.getSelectionModel().getMaxSelectionIndex();
if (i == jta.getRowCount() - 1)
jta.getSelectionModel().setSelectionInterval(0, 0);
else if (i != -1 && i < jta.getRowCount() - 1)
jta.getSelectionModel().setSelectionInterval(i + 1, i + 1);
else
jta.clearSelection();
}
}
/**
*
*/
// private class CloseAction extends AbstractAction {
// public CloseAction()
// {
// putValue(Action.NAME, "");
// putValue(Action.SHORT_DESCRIPTION,
// "Close panel");
// putValue(Action.SMALL_ICON, XNap.getSmallIcon("remove.png"));
// putValue(Action.MNEMONIC_KEY, new Integer('B'));
// putValue(Action.ACCELERATOR_KEY, new Integer('B'));
// }
// public void actionPerformed(ActionEvent e)
// {
// parent.doClose();
// }
// }
}
The table below shows all metrics for SearchSubPanel.java.




