package hermes.browser.dialog.message; import hermes.browser.HermesBrowser; import hermes.swing.actions.DirectoryCache; import hermes.util.IoUtils; import hermes.util.XmlUtils; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.IOException; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.TextMessage; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JEditorPane; import javax.swing.JFileChooser; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.SwingConstants; public class TextMessagePayloadPanel extends MessageWriter { private final JEditorPane textArea = new JEditorPane(); private final CharsetComboBox charSets = new CharsetComboBox(); private final JButton indentButton; public TextMessagePayloadPanel() { setLayout(new BorderLayout(0, 0)); JScrollPane scrollPane = new JScrollPane(); add(scrollPane, BorderLayout.CENTER); JPanel actionPanel = new JPanel(); FlowLayout flowLayout = (FlowLayout) actionPanel.getLayout(); flowLayout.setAlignment(FlowLayout.RIGHT); scrollPane.setViewportView(textArea); final JButton uploadButton = new JButton("Insert..."); uploadButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { doUpload(); } }); indentButton = new JButton("Indent"); indentButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { setText(XmlUtils.prettyPrintXml(getText())); } catch (Exception e1) { HermesBrowser.getBrowser().showErrorDialog(e1); } } }); indentButton.setEnabled(false); indentButton.setToolTipText("Fix XML indentation"); actionPanel.add(indentButton); actionPanel.add(uploadButton); final JCheckBox lineWrapCB = new JCheckBox("Line wrap"); lineWrapCB.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { // textArea.setLineWrap(lineWrapCB.isSelected()); } }); lineWrapCB.setHorizontalAlignment(SwingConstants.RIGHT); actionPanel.add(charSets); // actionPanel.add(lineWrapCB); add(actionPanel, BorderLayout.NORTH); // charSets.addActionListener(new ActionListener() { // @Override // public void actionPerformed(ActionEvent e) { // setText(new String(charSets.getCharset().encode(getText()).array(), // charSets.getCharset())); // } // }); } 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 { setText(IoUtils.readFile(file, charSets.getCharset())); } catch (IOException e) { HermesBrowser.getBrowser().showErrorDialog(e); } } } public TextMessagePayloadPanel(String text) { this(); setText(text); } public TextMessagePayloadPanel(TextMessage message) throws JMSException { this(); setText(message.getText()); } public String getText() { return textArea.getText(); } public void setText(String text) { if (XmlUtils.isXML(text)) { textArea.setContentType("text/xml"); indentButton.setEnabled(true); } else { indentButton.setEnabled(false); } textArea.setText(text); textArea.setCaretPosition(0); } @Override public void onMessage(Message message) throws JMSException { if (message instanceof TextMessage) { TextMessage textMessage = (TextMessage) message; textMessage.setText(getText()); } } @Override boolean supports(MessageType type) { return type == MessageType.TextMessage; } }