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); 
  } 
}