001 /****************************************************************************** 002 * Copyright (C) MActor Developers. All rights reserved. * 003 * ---------------------------------------------------------------------------* 004 * This file is part of MActor. * 005 * * 006 * MActor is free software; you can redistribute it and/or modify * 007 * it under the terms of the GNU General Public License as published by * 008 * the Free Software Foundation; either version 2 of the License, or * 009 * (at your option) any later version. * 010 * * 011 * MActor is distributed in the hope that it will be useful, * 012 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 014 * GNU General Public License for more details. * 015 * * 016 * You should have received a copy of the GNU General Public License * 017 * along with MActor; if not, write to the Free Software * 018 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * 019 ******************************************************************************/ 020 package org.mactor.ui.gui.actions; 021 022 import java.awt.BorderLayout; 023 import java.awt.FlowLayout; 024 025 import javax.swing.JButton; 026 import javax.swing.JFrame; 027 import javax.swing.JPanel; 028 import javax.swing.JScrollPane; 029 import javax.swing.JTextArea; 030 031 import org.dom4j.Element; 032 import org.mactor.brokers.Message; 033 import org.mactor.brokers.mqseries.MqSeriesQueueBrowser; 034 import org.mactor.framework.MactorException; 035 import org.mactor.framework.spec.MessageBrokersConfig.MessageBrokerConfig.ChannelConfig; 036 import org.mactor.ui.gui.AsyncAction; 037 import org.mactor.ui.gui.GuiUtil; 038 import org.mactor.ui.gui.project.GuiAction; 039 import org.mactor.ui.gui.project.ProjectController; 040 import org.mactor.ui.gui.project.ProjectNodeType; 041 import org.mactor.ui.gui.project.ProjectTreeNode; 042 043 public class BrowseMQSeriesChannelAction implements GuiAction { 044 public boolean isPermitted(ProjectTreeNode selectedTreeNode, ProjectController projectController, String[] parameters) { 045 if (selectedTreeNode == null || !selectedTreeNode.getNodeType().equals(ProjectNodeType.MBC_CHANNEL)) 046 return false; 047 String bc = ((Element) selectedTreeNode.getParentNode().getModelObject()).attributeValue("broker_class"); 048 if (bc != null && bc.endsWith("MqSeriesMessageBroker")) 049 return true; 050 return false; 051 } 052 public void perform(ProjectTreeNode selectedTreeNode, ProjectController projectController, String[] parameters) throws MactorException { 053 try { 054 new BrowseMQSeriesChannelDlg(ChannelConfig.loadConfig(((Element) selectedTreeNode.getModelObject()))).setVisible(true); 055 } catch (Exception e) { 056 GuiUtil.showGuiError(projectController.getControllerFrame(), e); 057 } 058 } 059 private class BrowseMQSeriesChannelDlg extends JFrame { 060 MqSeriesQueueBrowser browser; 061 JTextArea messageText = new JTextArea(40, 80); 062 JButton okButton = new JButton(new AsyncAction("Ok", false, new AsyncAction.AsyncRunnable() { 063 public void run() throws MactorException { 064 browser.close(); 065 dispose(); 066 } 067 })); 068 JButton firstButton = new JButton(new AsyncAction("First Message", false, new AsyncAction.AsyncRunnable() { 069 public void run() throws MactorException { 070 Message message = browser.browseFirstMessage(); 071 if (message == null) 072 messageText.setText("The channel is empty"); 073 else 074 messageText.setText(message.getContent()); 075 consumeButton.setEnabled(message != null); 076 } 077 })); 078 JButton consumeButton = new JButton(new AsyncAction("Consume Message", false, new AsyncAction.AsyncRunnable() { 079 public void run() throws MactorException { 080 browser.consumeMessage(); 081 messageText.setText("The message was consumed"); 082 } 083 })); 084 JButton nextButton = new JButton(new AsyncAction("Next Message", false, new AsyncAction.AsyncRunnable() { 085 public void run() throws MactorException { 086 Message message = browser.browseNextMessage(); 087 if (message == null) 088 messageText.setText("There is no more messages on the channel"); 089 else 090 messageText.setText(message.getContent()); 091 consumeButton.setEnabled(message != null); 092 } 093 })); 094 public BrowseMQSeriesChannelDlg(ChannelConfig cc) throws MactorException { 095 super("MActor - Browse MQSeries Channel '" + cc.getName() + "'"); 096 setLayout(new BorderLayout()); 097 this.browser = new MqSeriesQueueBrowser(cc); 098 JPanel topButtonPanel = new JPanel(new FlowLayout()); 099 topButtonPanel.add(firstButton); 100 topButtonPanel.add(nextButton); 101 // topButtonPanel.add(consumeButton); 102 add(topButtonPanel, BorderLayout.NORTH); 103 add(new JScrollPane(messageText), BorderLayout.CENTER); 104 messageText.setEditable(false); 105 JPanel bottomButtonPanel = new JPanel(new FlowLayout()); 106 bottomButtonPanel.add(okButton); 107 add(bottomButtonPanel, BorderLayout.SOUTH); 108 consumeButton.setEnabled(false); 109 pack(); 110 } 111 } 112 }