package hermes.browser.dialog.message;
import hermes.browser.HermesBrowser;
import hermes.swing.actions.DirectoryCache;
import hermes.util.DumpUtils;
import hermes.util.IoUtils;
import hermes.util.MessageUtils;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import javax.jms.BytesMessage;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
@SuppressWarnings("serial")
public class BytesMessagePayloadPanel extends MessageWriter {
private JTextArea textArea = new JTextArea() ;
private JScrollPane scrollPane = new JScrollPane();
private byte[] bytes ;
public BytesMessagePayloadPanel() {
setLayout(new BorderLayout(0, 0));
textArea.setEditable(false) ;
textArea.setFont(Font.decode("Monospaced-PLAIN-12")) ;
scrollPane.setViewportView(textArea);
add(scrollPane, BorderLayout.CENTER);
JPanel actionPanel = new JPanel();
FlowLayout flowLayout = (FlowLayout) actionPanel.getLayout();
flowLayout.setAlignment(FlowLayout.RIGHT);
final JButton uploadButton = new JButton("Insert...");
uploadButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
doUpload();
}
});
actionPanel.add(uploadButton);
add(actionPanel, BorderLayout.NORTH);
}
protected void doUpload() {
JFileChooser chooser = null;
if (DirectoryCache.lastUploadDirectory == null) {
chooser = new JFileChooser(System.getProperty("user.dir"));
} else {
chooser = new JFileChooser(DirectoryCache.lastUploadDirectory);
}
if (chooser.showDialog(this, "Insert File") == JFileChooser.APPROVE_OPTION) {
File file = chooser.getSelectedFile();
try {
bytes = IoUtils.readBytes(file) ;
textArea.setText(DumpUtils.dumpBinary(bytes, DumpUtils.DUMP_AS_HEX_AND_ALPHA));
} catch (IOException e) {
HermesBrowser.getBrowser().showErrorDialog(e);
}
}
}
public BytesMessagePayloadPanel(BytesMessage message) throws JMSException {
this();
setMessage(message);
}
public void setMessage(BytesMessage message) {
try {
bytes = MessageUtils.asBytes(message) ;
} catch (JMSException e) {
HermesBrowser.getBrowser().showErrorDialog(e) ;
}
textArea.setText(DumpUtils.dumpBinary(bytes, DumpUtils.DUMP_AS_HEX_AND_ALPHA));
}
@Override
public void onMessage(Message message) throws JMSException {
if (message instanceof BytesMessage) {
((BytesMessage) message).writeBytes(bytes) ;
}
}
@Override
boolean supports(MessageType type) {
return type == MessageType.BytesMessage;
}
}