Package com.googlecode.richrest.client.view.swing

Source Code of com.googlecode.richrest.client.view.swing.TransferPane$TransferListCellRenderer

package com.googlecode.richrest.client.view.swing;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DecimalFormat;
import java.util.Collection;

import javax.swing.DefaultListCellRenderer;
import javax.swing.DefaultListModel;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JToolBar;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import com.googlecode.richrest.client.Client;
import com.googlecode.richrest.client.Transfer;
import com.googlecode.richrest.client.event.TransferAdapter;
import com.googlecode.richrest.client.event.TransferEvent;
import com.googlecode.richrest.client.event.TransferListener;
import com.googlecode.richrest.util.ThreadUtils;

/**
* Action队列信息管理窗口,包装Action队列信息管理面板
* @see com.googlecode.richrest.client.view.swing.TransferPane
* @see com.googlecode.richrest.client.view.swing.NetworkStatus
* @author <a href="mailto:liangfei0201@gmail.com">liangfei</a>
*/
public class TransferPane extends JPanel {

  private static final long serialVersionUID = 1L;

  private Icon enableIcon = Images.getIcon("enable.gif");

  private Icon disableIcon = Images.getIcon("disable.gif");

  private final DefaultListModel transportationModel;

  private final JList transportationList;

  public JList getTransferList() {
    return transportationList;
  }

  private final JToolBar toolBar = new JToolBar();

  public JToolBar getToolBar() {
    return toolBar;
  }

  private final JToolBar statusBar = new JToolBar();

  public JToolBar getStatusBar() {
    return statusBar;
  }

  private final Client client;

  public TransferPane(final Client client) {
    if (client == null)
      throw new NullPointerException("Client == null!");
    this.client = client;
    this.setLayout(new BorderLayout());

    toolBar.setFloatable(false);
    this.add(BorderLayout.NORTH, toolBar);

    statusBar.setFloatable(false);
    statusBar.setLayout(new BorderLayout());
    this.add(BorderLayout.SOUTH, statusBar);
    JPanel descPane = new JPanel();
    descPane.add(new JLabel("传输状态", enableIcon, JLabel.LEFT));
    descPane.add(new JLabel("挂起状态", disableIcon, JLabel.LEFT));
    statusBar.add(BorderLayout.EAST, descPane);

    final JLabel timeLabel = new JLabel();
    timeLabel.setIcon(Images.getIcon("time.gif"));
    statusBar.add(BorderLayout.WEST, timeLabel);

    transportationModel = new DefaultListModel();
    transportationList = new JList(transportationModel);
    transportationList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    transportationList.setCellRenderer(new TransferListCellRenderer());
    final JScrollPane actionListPane = new JScrollPane();
    actionListPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    actionListPane.getViewport().setView(transportationList);
    this.add(BorderLayout.CENTER, actionListPane);

    final JButton abortButton = new JButton("中止", Images.getIcon("abort.gif"));
    abortButton.setToolTipText("中止传输项");
    abortButton.setEnabled(false);
    toolBar.add(abortButton);
    abortButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        if (getTransferModelSize() == 0) {
          JOptionPane.showMessageDialog(TransferPane.this, "没有任何传输项!", "中止", JOptionPane.WARNING_MESSAGE);
          return;
        }
        final Transfer execution = (Transfer)transportationList.getSelectedValue();
        if (execution == null) {
          JOptionPane.showMessageDialog(TransferPane.this, "请选择传输项!", "中止", JOptionPane.WARNING_MESSAGE);
          return;
        }
        if (! execution.isAbortable()) {
          JOptionPane.showMessageDialog(TransferPane.this, "此传输项不允许中止!", "中止", JOptionPane.WARNING_MESSAGE);
          return;
        }
        ThreadUtils.execute(new Runnable(){
          public void run() {
            try {
              execution.abort();
              JOptionPane.showMessageDialog(TransferPane.this, "中止传输项完成!", "中止", JOptionPane.INFORMATION_MESSAGE);
            } catch (Throwable t) {
              JOptionPane.showMessageDialog(TransferPane.this, "中止传输项失败! 原因: " + t.getMessage(), "中止", JOptionPane.WARNING_MESSAGE);
            }
          }
        });
      }
    });

    transportationList.getSelectionModel().addListSelectionListener(new ListSelectionListener(){

      public void valueChanged(ListSelectionEvent e) {
        final Transfer execution = (Transfer)transportationList.getSelectedValue();
        if (execution != null) {
          timeLabel.setText(new DecimalFormat("###,##0").format(System.currentTimeMillis() - execution.getTransferringTime().getTime()) + " ms");
        } else {
          timeLabel.setText("");
        }
        abortButton.setEnabled(execution != null && execution.isAbortable());
      }

    });

    final JButton resetButton = new JButton("刷新", Images.getIcon("refresh.gif"));
    resetButton.setToolTipText("刷新传输列表");
    toolBar.add(resetButton);
    resetButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        try {
          refreshTransferList();
          JOptionPane.showMessageDialog(TransferPane.this, "刷新传输列表成功!", "刷新", JOptionPane.INFORMATION_MESSAGE);
        } catch (Throwable t) {
          JOptionPane.showMessageDialog(TransferPane.this, "刷新传输列表失败! 原因: " + t.getMessage(), "刷新", JOptionPane.WARNING_MESSAGE);
        }
      }
    });
    transportationListener = new TransferDelegate(new TransferAdapter() {
      @Override
      public void onTransfer(TransferEvent event) {
        Transfer execution = event.getTransfer();
        if (! execution.isTransferred()) {
          synchronized (transportationModel) {
            if (! transportationModel.contains(execution))
              transportationModel.addElement(execution);
          }
        }
      }
      @Override
      public void onTransferred(TransferEvent event) {
        Transfer execution = event.getTransfer();
        synchronized (transportationModel) {
          transportationModel.removeElement(execution);
        }
      }
      @Override
      public void onTransferring(final TransferEvent event) {
        synchronized (transportationModel) {
          transportationList.repaint();
        }
      }
    });
    client.addListener(transportationListener);
  }

  private void refreshTransferList() {
    Collection<Transfer> executions = client.getTransferrer().getTransfers();
    synchronized (transportationModel) {
      transportationModel.clear();
      for (Transfer execution : executions) {
        if (! execution.isTransferred()) {
          transportationModel.addElement(execution);
        }
      }
    }
  }

  private final TransferListener transportationListener;

  public void dispose() {
    client.removeListener(transportationListener);
  }

  private int getTransferModelSize() {
    synchronized (transportationModel) {
      return transportationModel.getSize();
    }
  }

  private class TransferListCellRenderer extends DefaultListCellRenderer  {

    private static final long serialVersionUID = 1L;

    public Component getListCellRendererComponent(JList list, Object value,
        int index, boolean isSelected, boolean cellHasFocus) {
      super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
      Transfer execution = (Transfer)value;
      if (execution.isTransferring())
        this.setIcon(enableIcon);
      else
        this.setIcon(disableIcon);
      this.setText("" + (index + 1) + ". " + execution.toString());
      return this;
    }

  }

}
TOP

Related Classes of com.googlecode.richrest.client.view.swing.TransferPane$TransferListCellRenderer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.