receivemessage.java

来自「开源项目openfire的完整源程序」· Java 代码 · 共 629 行 · 第 1/2 页

JAVA
629
字号
/** * $Revision: $ * $Date: $ * * Copyright (C) 2006 Jive Software. All rights reserved. * * This software is published under the terms of the GNU Lesser Public License (LGPL), * a copy of which is included in this distribution. */package org.jivesoftware.sparkimpl.plugin.filetransfer.transfer.ui;import org.jivesoftware.Spark;import org.jivesoftware.resource.Res;import org.jivesoftware.resource.SparkRes;import org.jivesoftware.smack.XMPPException;import org.jivesoftware.smack.util.StringUtils;import org.jivesoftware.smackx.filetransfer.FileTransfer;import org.jivesoftware.smackx.filetransfer.FileTransferRequest;import org.jivesoftware.smackx.filetransfer.IncomingFileTransfer;import org.jivesoftware.spark.SparkManager;import org.jivesoftware.spark.component.FileDragLabel;import org.jivesoftware.spark.ui.ContactItem;import org.jivesoftware.spark.ui.ContactList;import org.jivesoftware.spark.util.ByteFormat;import org.jivesoftware.spark.util.GraphicUtils;import org.jivesoftware.spark.util.ResourceUtils;import org.jivesoftware.spark.util.SwingWorker;import org.jivesoftware.spark.util.URLFileSystem;import org.jivesoftware.spark.util.log.Log;import org.jivesoftware.sparkimpl.plugin.filetransfer.transfer.Downloads;import java.awt.Color;import java.awt.Cursor;import java.awt.Font;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.Insets;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.net.MalformedURLException;import java.net.URL;import javax.swing.AbstractAction;import javax.swing.Action;import javax.swing.BorderFactory;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFileChooser;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JPopupMenu;import javax.swing.JProgressBar;public class ReceiveMessage extends JPanel {    private FileDragLabel imageLabel = new FileDragLabel();    private JLabel titleLabel = new JLabel();    private JLabel fileLabel = new JLabel();    private TransferButton acceptLabel = new TransferButton();    private TransferButton declineLabel = new TransferButton();    private JProgressBar progressBar = new JProgressBar();    private IncomingFileTransfer transfer;    private TransferButton cancelButton = new TransferButton();    public ReceiveMessage() {        setLayout(new GridBagLayout());        setBackground(new Color(250, 249, 242));        add(imageLabel, new GridBagConstraints(0, 0, 1, 3, 0.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));        add(titleLabel, new GridBagConstraints(1, 0, 2, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));        titleLabel.setFont(new Font("Dialog", Font.BOLD, 11));        titleLabel.setForeground(new Color(211, 174, 102));        add(fileLabel, new GridBagConstraints(1, 1, 2, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 5, 5), 0, 0));        add(acceptLabel, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 0, 5), 0, 0));        add(declineLabel, new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 0, 5), 0, 0));        ResourceUtils.resButton(acceptLabel, Res.getString("accept"));        ResourceUtils.resButton(declineLabel, Res.getString("reject"));        // Decorate Cancel Button        decorateCancelButton();        acceptLabel.setForeground(new Color(73, 113, 196));        declineLabel.setForeground(new Color(73, 113, 196));        declineLabel.setFont(new Font("Dialog", Font.BOLD, 11));        acceptLabel.setFont(new Font("Dialog", Font.BOLD, 11));        acceptLabel.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, new Color(73, 113, 196)));        declineLabel.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, new Color(73, 113, 196)));        setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.white));        acceptLabel.addMouseListener(new MouseAdapter() {            public void mouseEntered(MouseEvent e) {                acceptLabel.setCursor(new Cursor(Cursor.HAND_CURSOR));            }            public void mouseExited(MouseEvent e) {                acceptLabel.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));            }        });        declineLabel.addMouseListener(new MouseAdapter() {            public void mouseEntered(MouseEvent e) {                declineLabel.setCursor(new Cursor(Cursor.HAND_CURSOR));            }            public void mouseExited(MouseEvent e) {                declineLabel.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));            }        });    }    public void acceptFileTransfer(final FileTransferRequest request) {        String fileName = request.getFileName();        long fileSize = request.getFileSize();        String requestor = request.getRequestor();        String bareJID = StringUtils.parseBareAddress(requestor);        ByteFormat format = new ByteFormat();        String text = format.format(fileSize);        fileLabel.setText(fileName + " (" + text + ")");        ContactList contactList = SparkManager.getWorkspace().getContactList();        ContactItem contactItem = contactList.getContactItemByJID(bareJID);        titleLabel.setText(Res.getString("message.user.is.sending.you.a.file", contactItem.getNickname()));        File tempFile = new File(Spark.getSparkUserHome(), "/tmp");        try {            tempFile.mkdirs();            File file = new File(tempFile, fileName);            file.delete();            BufferedWriter out = new BufferedWriter(new FileWriter(file));            out.write("a");            out.close();            imageLabel.setIcon(GraphicUtils.getIcon(file));            // Delete temp file when program exits.            file.delete();        }        catch (IOException e) {            imageLabel.setIcon(SparkRes.getImageIcon(SparkRes.DOCUMENT_INFO_32x32));            Log.error(e);        }        acceptLabel.addMouseListener(new MouseAdapter() {            public void mousePressed(MouseEvent e) {                acceptRequest(request);            }        });        declineLabel.addMouseListener(new MouseAdapter() {            public void mousePressed(MouseEvent e) {                rejectRequest(request);            }        });    }    private void rejectRequest(FileTransferRequest request) {        request.reject();        setBackground(new Color(239, 245, 250));        acceptLabel.setText("");        declineLabel.setText("");        fileLabel.setText("");        titleLabel.setText(Res.getString("message.file.transfer.canceled"));        titleLabel.setForeground(new Color(65, 139, 179));        invalidate();        validate();        repaint();    }    private void acceptRequest(final FileTransferRequest request) {        String requestor = request.getRequestor();        String bareJID = StringUtils.parseBareAddress(requestor);        ContactList contactList = SparkManager.getWorkspace().getContactList();        final ContactItem contactItem = contactList.getContactItemByJID(bareJID);        setBackground(new Color(239, 245, 250));        acceptLabel.setText("");        declineLabel.setText("");        titleLabel.setText(Res.getString("message.negotiate.file.transfer"));        titleLabel.setForeground(new Color(65, 139, 179));        add(progressBar, new GridBagConstraints(1, 2, 2, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 0, 5), 150, 0));        add(cancelButton, new GridBagConstraints(1, 3, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 5, 5), 0, 0));        cancelButton.setVisible(true);        transfer = request.accept();        try {            Downloads downloads = Downloads.getInstance();            final File downloadedFile = new File(downloads.getDownloadDirectory(), request.getFileName());            progressBar.setMaximum((int)request.getFileSize());            progressBar.setStringPainted(true);            SwingWorker worker = new SwingWorker() {                public Object construct() {                    try {                        transfer.recieveFile(downloadedFile);                    }                    catch (XMPPException e) {                        Log.error(e);                    }                    while (true) {                        try {                            Thread.sleep(10);                        }                        catch (InterruptedException e) {                            Log.error(e);                        }                        long bytesRead = transfer.getAmountWritten();                        if (bytesRead == -1) {                            bytesRead = 0;                        }                        ByteFormat format = new ByteFormat();                        String text = format.format(bytesRead);                        progressBar.setString(text + " received");                        progressBar.setValue((int)bytesRead);                        FileTransfer.Status status = transfer.getStatus();                        if (status == FileTransfer.Status.error ||                            status == FileTransfer.Status.complete || status == FileTransfer.Status.cancelled ||                            status == FileTransfer.Status.refused) {                            break;                        }                        else if (status == FileTransfer.Status.negotiating_stream) {                            titleLabel.setText(Res.getString("message.negotiate.stream"));                        }                        else if (status == FileTransfer.Status.in_progress) {                            titleLabel.setText(Res.getString("message.receiving.file", contactItem.getNickname()));                        }                    }                    return "ok";                }                public void finished() {                    if (transfer.getAmountWritten() >= request.getFileSize()) {                        transferDone(request, transfer);                        imageLabel.setFile(downloadedFile);                        imageLabel.setToolTipText(Res.getString("message.click.to.open"));                        titleLabel.setToolTipText(Res.getString("message.click.to.open"));                        imageLabel.addMouseListener(new MouseAdapter() {                            public void mouseClicked(MouseEvent e) {                                if (e.getClickCount() == 2) {                                    openFile(downloadedFile);                                }                            }                        });                        imageLabel.addMouseListener(new MouseAdapter() {                            public void mouseEntered(MouseEvent e) {                                imageLabel.setCursor(new Cursor(Cursor.HAND_CURSOR));                            }                            public void mouseExited(MouseEvent e) {                                imageLabel.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));                            }                        });                        titleLabel.addMouseListener(new MouseAdapter() {                            public void mouseClicked(MouseEvent e) {                                if (e.getClickCount() == 2) {                                    openFile(downloadedFile);                                }                            }                        });                        titleLabel.addMouseListener(new MouseAdapter() {                            public void mouseEntered(MouseEvent e) {                                titleLabel.setCursor(new Cursor(Cursor.HAND_CURSOR));                            }                            public void mouseExited(MouseEvent e) {                                titleLabel.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));                            }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?