/* * SoapUI, Copyright (C) 2004-2016 SmartBear Software * * Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent * versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * * http://ec.europa.eu/idabc/eupl * * Unless required by applicable law or agreed to in writing, software distributed under the Licence is * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the Licence for the specific language governing permissions and limitations * under the Licence. */ package com.eviware.soapui.impl.wsdl.teststeps.actions; import com.eviware.soapui.SoapUI; import com.eviware.soapui.impl.wsdl.panels.request.StringToStringMapTableModel; import com.eviware.soapui.impl.wsdl.support.MessageExchangeRequestMessageEditor; import com.eviware.soapui.impl.wsdl.support.MessageExchangeResponseMessageEditor; import com.eviware.soapui.model.ModelItem; import com.eviware.soapui.model.iface.MessageExchange; import com.eviware.soapui.model.support.ModelSupport; import com.eviware.soapui.model.testsuite.AssertedXPath; import com.eviware.soapui.model.testsuite.RequestAssertedMessageExchange; import com.eviware.soapui.model.testsuite.ResponseAssertedMessageExchange; import com.eviware.soapui.support.UISupport; import com.eviware.soapui.support.swing.JTableFactory; import com.eviware.soapui.support.types.StringToStringMap; import com.eviware.soapui.ui.desktop.DesktopPanel; import com.eviware.soapui.ui.support.DefaultDesktopPanel; import org.jdesktop.swingx.JXTable; import javax.swing.AbstractAction; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; /** * Shows a desktop-panel with the TestStepResult for a WsdlTestRequestStepResult * * @author Ole.Matzura */ public class ShowMessageExchangeAction extends AbstractAction { private DefaultDesktopPanel desktopPanel; private final MessageExchange messageExchange; private final String ownerName; private MessageExchangeResponseMessageEditor responseMessageEditor; private MessageExchangeRequestMessageEditor requestMessageEditor; public ShowMessageExchangeAction(MessageExchange messageExchange, String ownerName) { super("Show Message Exchange"); this.ownerName = ownerName; this.messageExchange = messageExchange; } public void actionPerformed(ActionEvent e) { try { UISupport.showDesktopPanel(buildFrame()); } catch (Exception ex) { SoapUI.logError(ex); } } private DesktopPanel buildFrame() { if (desktopPanel == null) { desktopPanel = new MessageExchangeDesktopPanel("Message Viewer", "Message for " + ownerName, buildContent()); } return desktopPanel; } private JComponent buildContent() { JTabbedPane messageTabs = new JTabbedPane(); messageTabs.addTab("Request Message", buildRequestTab()); messageTabs.addTab("Response Message", buildResponseTab()); messageTabs.addTab("Properties", buildPropertiesTab()); String[] messages = messageExchange.getMessages(); if (messages != null && messages.length > 0) { messageTabs.addTab("Messages", buildMessagesTab()); } if (getAssertedXPaths().size() > 0) { messageTabs.addTab("XPath Assertions", buildAssertionsTab()); } messageTabs.setPreferredSize(new Dimension(500, 400)); JPanel tabPanel = UISupport.createTabPanel(messageTabs, true); Component descriptionPanel = UISupport.buildDescription("MessageExchange Results", "See the request/response message below", null); tabPanel.add(descriptionPanel, BorderLayout.NORTH); return tabPanel; } private Component buildAssertionsTab() { List<AssertedXPath> assertedXPaths = getAssertedXPaths(); DefaultTableModel tm = new DefaultTableModel(assertedXPaths.size(), 2); tm.setColumnIdentifiers(new String[]{"Label", "XPath"}); JXTable table = JTableFactory.getInstance().makeJXTable(tm); table.setHorizontalScrollEnabled(true); table.getColumn(0).setPreferredWidth(100); for (int c = 0; c < assertedXPaths.size(); c++) { tm.setValueAt(assertedXPaths.get(c).getLabel(), c, 0); tm.setValueAt(assertedXPaths.get(c).getPath(), c, 1); } return new JScrollPane(table); } private List<AssertedXPath> getAssertedXPaths() { List<AssertedXPath> assertedXPaths = new ArrayList<AssertedXPath>(); if (messageExchange instanceof RequestAssertedMessageExchange) { AssertedXPath[] xpaths = ((RequestAssertedMessageExchange) messageExchange).getAssertedXPathsForRequest(); if (xpaths != null && xpaths.length > 0) { assertedXPaths.addAll(Arrays.asList(xpaths)); } } if (messageExchange instanceof ResponseAssertedMessageExchange) { AssertedXPath[] xpaths = ((ResponseAssertedMessageExchange) messageExchange).getAssertedXPathsForResponse(); if (xpaths != null && xpaths.length > 0) { assertedXPaths.addAll(Arrays.asList(xpaths)); } } return assertedXPaths; } private Component buildPropertiesTab() { StringToStringMap properties = new StringToStringMap(); if (messageExchange != null && messageExchange.getProperties() != null) { properties.putAll(messageExchange.getProperties()); // for( String name : messageExchange.getResponse().getPropertyNames()) // { // properties.put( name, messageExchange.getResponse().getProperty( // name ) ); // } properties.put("Timestamp", new Date(messageExchange.getTimestamp()).toString()); properties.put("Time Taken", String.valueOf(messageExchange.getTimeTaken())); } JTable table = JTableFactory.getInstance().makeJTable(new StringToStringMapTableModel(properties, "Name", "Value", false)); return new JScrollPane(table); } private Component buildMessagesTab() { String[] messages = messageExchange.getMessages(); return messages == null || messages.length == 0 ? new JLabel("No messages to display") : new JScrollPane( new JList(messages)); } private Component buildResponseTab() { responseMessageEditor = new MessageExchangeResponseMessageEditor(messageExchange); return responseMessageEditor; } private Component buildRequestTab() { requestMessageEditor = new MessageExchangeRequestMessageEditor(messageExchange); return requestMessageEditor; } private final class MessageExchangeDesktopPanel extends DefaultDesktopPanel { private MessageExchangeDesktopPanel(String title, String description, JComponent component) { super(title, description, component); } @Override public boolean onClose(boolean canCancel) { requestMessageEditor.release(); responseMessageEditor.release(); desktopPanel = null; return super.onClose(canCancel); } @Override public boolean dependsOn(ModelItem modelItem) { return ModelSupport.dependsOn(messageExchange.getModelItem(), modelItem); } } }