/* * Copyright 2003,2004,2005 Colin Crist * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package hermes.swing.actions; import hermes.Hermes; import hermes.MessageFactory; import hermes.browser.HermesBrowser; import hermes.browser.IconCache; import hermes.browser.actions.BrowserAction; import hermes.browser.actions.MessageStoreBrowserAction; import hermes.browser.tasks.AddToMessageStoreTask; import java.awt.HeadlessException; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import javax.swing.Action; import javax.swing.KeyStroke; import javax.swing.event.ListSelectionEvent; import org.apache.log4j.Logger; /** * Paste XML messages from the clipboard to the currently selected queue. * * @author colincrist@hermesjms.com * @version $Id: PasteMessagesFromClipboardAction.java,v 1.1 2005/05/13 15:31:20 * colincrist Exp $ */ public class PasteMessagesFromClipboardAction extends BrowseActionListenerAdapter { /** * */ private static final long serialVersionUID = 315578006254064372L; private static final Logger log = Logger.getLogger(PasteMessagesFromClipboardAction.class); public PasteMessagesFromClipboardAction() { super(false, false, false); putValue(Action.NAME, "Paste"); putValue(Action.SHORT_DESCRIPTION, "Paste any messages from the clipboard to this queue/topic."); putValue(Action.SMALL_ICON, IconCache.getIcon("paste")); putValue(Action.ACCELERATOR_KEY,KeyStroke.getKeyStroke(KeyEvent.VK_PASTE, 0, false)) ; setEnabled(true); try { //Toolkit.getDefaultToolkit().getSystemClipboard().addFlavorListener(new ClipboardFlavourListener(this, DataFlavor.stringFlavor)) ; } catch (NoClassDefFoundError ex) { setEnabled(true) ; } } public void actionPerformed(ActionEvent arg0) { if (HermesBrowser.getBrowser().getDocumentPane().getActiveDocument() instanceof BrowserAction) { try { final BrowserAction browserAction = (BrowserAction) HermesBrowser.getBrowser().getDocumentPane().getActiveDocument(); final Clipboard systemcClipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); final Transferable clipboardContent = systemcClipboard.getContents(null); if (clipboardContent == null) { Hermes.ui.getDefaultMessageSink().add("Clipboard is empty"); } else { if (clipboardContent.isDataFlavorSupported(DataFlavor.stringFlavor)) { try { final String xml = (String) clipboardContent.getTransferData(DataFlavor.stringFlavor); if (browserAction instanceof MessageStoreBrowserAction) { if (HermesBrowser.getBrowser().getBrowserTree().getLastSelectedHermesTreeNode() != null) { final MessageStoreBrowserAction storeAction = (MessageStoreBrowserAction) browserAction; final MessageFactory messageFactory = HermesBrowser.getBrowser().getBrowserTree().getLastSelectedHermesTreeNode().getHermes(); HermesBrowser.getBrowser().getThreadPool() .invokeLater(new AddToMessageStoreTask(messageFactory, storeAction.getMessageStore(), xml)); } else { HermesBrowser.getBrowser().showErrorDialog("A session must be selected to use as a factory for the messages") ; } } else { HermesBrowser.getBrowser().getActionFactory().createSimpleSendMessageAction(browserAction.getHermes(), browserAction.getDestination(), browserAction.getDomain(), xml, false); } } catch (Exception e) { HermesBrowser.getBrowser().showErrorDialog("During paste: ", e); } } else { HermesBrowser.getBrowser().showErrorDialog("The data on the clipboard cannot be converted to a String") ; } } } catch (HeadlessException e) { log.error("Cannot paste: " + e.getMessage(), e); } catch (Throwable e) { HermesBrowser.getBrowser().showErrorDialog("During paste: ", e); } } } public void valueChanged(ListSelectionEvent event) { // Override this as we don't care if anything is selected or not. } }