www.pudn.com > htmlsaver.rar > NameURL.java
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.util.*;
public class NameURL implements ActionListener
{
Project prj;
JTable table;
NameLinkTableModel model;
Vector link;
Vector name;
JButton delete;
JButton clear;
JButton show;
JButton naming;
JButton analyse;
JButton autoName;
JButton add;
JButton same;
JButton finish;
JButton together;
JButton erase;
JButton check;
JButton quick;
JTextField quickName;
JDialog dialog;
NameURL (Vector link, Vector name, Project prj, JFrame owner)
{
this.prj = prj;
this.link = link;
this.name = name;
dialog = new JDialog(owner, "Name URL", true);
initDialog();
}
void initDialog()
{
model = new NameLinkTableModel();
table = new JTable(model);
TableColumn column = null;
column = table.getColumnModel().getColumn(0);
column.setPreferredWidth(300);
column = table.getColumnModel().getColumn(1);
column.setPreferredWidth(150);
column = table.getColumnModel().getColumn(2);
column.setPreferredWidth(100);
dialog.getContentPane().setLayout(new BorderLayout(5, 5));
dialog.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
JPanel pp = new JPanel(new BorderLayout());
JPanel panel = new JPanel(new GridLayout(4, 3, 5, 5));
delete = new JButton(/*"Delete"*/"删除链接");
delete.addActionListener(this);
panel.add(delete);
clear = new JButton(/*"Clear Other Same Links"*/"清除重复链接");
clear.addActionListener(this);
panel.add(clear);
same = new JButton(/*"Deal All Same Links"*/"处理所有重复链接");
same.addActionListener(this);
panel.add(same);
show = new JButton(/*"Show"*/"浏览链接");
show.addActionListener(this);
panel.add(show);
analyse = new JButton(/*"Analyse Link"*/"分析链接");
analyse.addActionListener(this);
panel.add(analyse);
add = new JButton(/*"Add Link"*/"添加链接");
add.addActionListener(this);
panel.add(add);
naming = new JButton(/*"Name Links"*/"命名链接");
naming.addActionListener(this);
panel.add(naming);
autoName = new JButton(/*"Auto Name Links"*/"自动命名");
autoName.addActionListener(this);
panel.add(autoName);
together = new JButton(/*"Name Links to Same File"*/"归并到同一文件");
together.addActionListener(this);
panel.add(together);
erase = new JButton(/*"Erase File Name"*/"清除文件名");
erase.addActionListener(this);
panel.add(erase);
finish = new JButton(/*"Finish"*/"完成");
finish.addActionListener(this);
panel.add(finish);
check = new JButton(/*"Check all File Name"*/"查看所有文件名");
check.addActionListener(this);
panel.add(check);
pp.add(panel, BorderLayout.CENTER);
quick = new JButton("快速命名");
quick.addActionListener(this);
quickName = new JTextField("");
panel = new JPanel(new BorderLayout());
panel.add(new JLabel("文件名:"), BorderLayout.WEST);
panel.add(quickName, BorderLayout.CENTER);
panel.add(quick, BorderLayout.EAST);
pp.add(panel, BorderLayout.SOUTH);
dialog.getContentPane().add(pp, BorderLayout.SOUTH);
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setSize(600, 500);
dialog.show();
}
class NameLinkTableModel extends AbstractTableModel
{
String[] columnNames = {"Link URL", "Link Text", "File Name"};
public String getColumnName(int col) {
return columnNames[col].toString();
}
public int getRowCount() { return link.size(); }
public int getColumnCount() { return 3; }
public Object getValueAt(int row, int col) {
if (col == 0)
return ((Link)link.elementAt(row)).url;
else if (col == 1)
return ((Link)link.elementAt(row)).text;
else
return name.elementAt(row);
}
/*
public boolean isCellEditable(int row, int col)
{ return true; }
public void setValueAt(Object value, int row, int col) {
rowData[row][col] = value;
fireTableCellUpdated(row, col);
}
*/
public void deleteLink(int row)
{
if ((row < 0) || (row >= link.size()))
return;
link.remove(row);
name.remove(row);
}
public void refresh()
{
this.fireTableDataChanged();
}
public void selectRow(int row)
{
if (row < link.size())
table.setRowSelectionInterval(row, row);
}
}
protected boolean selectOne()
{
if (table.getSelectedRowCount() == 1)
return true;
else
{
JOptionPane.showMessageDialog(null, "请选择一个链接!");
return false;
}
}
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == delete)
deleteLink();
else if (e.getSource() == clear)
clearLink();
else if (e.getSource() == show)
showLink();
else if (e.getSource() == naming)
namingLink();
else if (e.getSource() == analyse)
analyseLink();
else if (e.getSource() == autoName)
autoNameLink();
else if (e.getSource() == add)
addLink();
else if (e.getSource() == same)
sameLink();
else if (e.getSource() == together)
togetherLink();
else if (e.getSource() == erase)
eraseFileName();
else if (e.getSource() == quick)
quickLink();
else if (e.getSource() == check)
checkFileName();
else if (e.getSource() == finish)
{
dialog.hide();
}
}
protected void deleteLink()
{
if (JOptionPane.showConfirmDialog(null, "Sure delete these links?",
"Delete", JOptionPane.OK_CANCEL_OPTION)
== JOptionPane.CANCEL_OPTION)
return;
int[] rows = table.getSelectedRows();
for (int i = rows.length - 1; i >= 0; i--)
model.deleteLink(rows[i]);
model.refresh();
}
protected void clearLink()
{
if (selectOne())
{
int row = table.getSelectedRow();
Link curLink = (Link)link.elementAt(row);
for (int i = link.size() - 1; i > row; i--)
{
Link u = (Link)link.elementAt(i);
if (curLink.url.equals(u.url))
{
link.remove(i);
name.remove(i);
}
}
for (int i = row - 1; i >= 0; i--)
{
Link u = (Link)link.elementAt(i);
if (curLink.url.equals(u.url))
{
link.remove(i);
name.remove(i);
}
}
model.refresh();
model.selectRow(row);
}
}
protected void showLink()
{
if (selectOne())
{
int row = table.getSelectedRow();
Link curLink = (Link)link.elementAt(row);
new HTMLViewer(curLink.url);
}
}
protected void namingLink()
{
int[] rows = table.getSelectedRows();
if (rows.length < 1)
return;
Vector urls = new Vector();
for (int i = 0; i < rows.length; i++)
{
Link curLink = (Link)link.elementAt(rows[i]);
urls.add(curLink.url);
}
NameGroupLink get = new NameGroupLink(urls, dialog);
Vector groupName = get.getName();
if (groupName == null)
return;
for (int i = 0; i < rows.length; i++)
name.set(rows[i], groupName.elementAt(i));
model.refresh();
}
protected void analyseLink()
{
if (selectOne())
{
int row = table.getSelectedRow();
Link curLink = (Link)link.elementAt(row);
Vector newLinks = GetURL.getURL(curLink.url, prj);
if (newLinks == null)
{
JOptionPane.showMessageDialog(null, "有错误发生!分析失败!");
return;
}
newLinks.remove(0);
LinkViewer view = new LinkViewer(dialog, newLinks);
link.addAll(newLinks);
for (int i = 0; i < newLinks.size(); i++)
name.add(new String(""));
model.refresh();
model.selectRow(row);
sameLink();
}
}
protected void autoNameLink()
{
for (int i = 0; i < link.size(); i++)
{
Link curLink = (Link)link.elementAt(i);
String curName = (String)name.elementAt(i);
if (curName.equals(""))
{
String newName = FileURLChange.getAutoName(curLink.url);
if (newName == null)
continue;
name.setElementAt(newName, i);
}
}
model.refresh();
}
protected void addLink()
{
LinkInput input = new LinkInput(dialog);
Link newLink = input.link;
if (newLink != null)
{
link.add(newLink);
name.add(new String(""));
model.refresh();
}
}
protected void sameLink()
{
for (int i = 0; i < link.size();)
{
Vector sameLink = new Vector();
Vector sameName = new Vector();
Link curLink = (Link)link.elementAt(i);
for (int j = link.size() - 1; j >= i; j--)
{
Link u = (Link)link.elementAt(j);
if (curLink.url.equals(u.url))
{
sameLink.add(u);
link.remove(j);
sameName.add(name.elementAt(j));
name.remove(j);
}
}
if (sameLink.size() > 1)
new LinkViewer(dialog, sameLink);
for (int j = 0; j < sameLink.size(); j++)
{
link.insertElementAt(sameLink.elementAt(j), i);
name.insertElementAt(sameName.elementAt(j), i);
}
i += sameLink.size();
}
model.refresh();
}
protected void togetherLink()
{
int[] rows = table.getSelectedRows();
if (rows.length < 2)
return;
Vector fileNames = new Vector();
for (int i = 0; i < rows.length; i++)
{
String curName = (String)name.elementAt(rows[i]);
if (!curName.equals(""))
fileNames.add(curName);
}
if (fileNames.size() == 0)
{
JOptionPane.showMessageDialog(dialog,
"没有链接被命名。请至少先命名其中一个链接。");
return;
}
else
{
int index = 0;
if (fileNames.size() > 1)
{
SelectOneString select = new SelectOneString(fileNames, dialog);
index = select.getSelectedIndex();
if (index == -1)
return;
}
String fileName = (String)fileNames.elementAt(index);
for (int i = 0; i < rows.length; i++)
name.set(rows[i], fileName);
model.refresh();
}
}
protected void quickLink()
{
if (!selectOne())
return;
int row = table.getSelectedRow();
name.set(row, quickName.getText());
model.refresh();
}
protected void eraseFileName()
{
if (JOptionPane.showConfirmDialog(null, "确定清除这些文件名?",
"Erase File Name", JOptionPane.OK_CANCEL_OPTION)
== JOptionPane.CANCEL_OPTION)
return;
int[] rows = table.getSelectedRows();
for (int i = 0; i < rows.length; i++)
name.set(rows[i], new String(""));
model.refresh();
}
protected void checkFileName()
{
for (int i = 0; i < name.size();)
{
Vector tmpLink = new Vector();
Vector tmpName = new Vector();
String curName = (String)name.elementAt(i);
for (int j = name.size() - 1; j > i; j--)
{
String n = (String)name.elementAt(j);
if (curName.equals(n))
{
tmpLink.add(link.elementAt(j));
link.remove(j);
tmpName.add(name.elementAt(j));
name.remove(j);
}
}
tmpLink.add(link.elementAt(i));
link.remove(i);
tmpName.add(name.elementAt(i));
name.remove(i);
if (tmpName.size() > 1)
new FileNameViewer(tmpLink, tmpName, dialog);
for (int j = 0; j < tmpName.size(); j++)
{
link.insertElementAt(tmpLink.elementAt(j), i);
name.insertElementAt(tmpName.elementAt(j), i);
}
i += tmpLink.size();
}
model.refresh();
}
public static void main(String[] args)
{
Project prj = new Project();
Vector l = GetURL.getURL(new SystemIn().readLine(), prj);
Vector n = new Vector();
for (int i = 0; i < l.size(); i++)
n.add("");
NameURL naming = new NameURL(l, n, prj, null);
}
}