1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.wsdl.teststeps.actions;
14
15 import java.awt.BorderLayout;
16 import java.awt.Component;
17 import java.awt.Dimension;
18 import java.awt.event.ActionEvent;
19 import java.util.Date;
20
21 import javax.swing.AbstractAction;
22 import javax.swing.JComponent;
23 import javax.swing.JLabel;
24 import javax.swing.JList;
25 import javax.swing.JPanel;
26 import javax.swing.JScrollPane;
27 import javax.swing.JSplitPane;
28 import javax.swing.JTabbedPane;
29 import javax.swing.JTable;
30
31 import com.eviware.soapui.SoapUI;
32 import com.eviware.soapui.impl.wsdl.panels.request.StringToStringMapTableModel;
33 import com.eviware.soapui.model.iface.MessageExchange;
34 import com.eviware.soapui.support.UISupport;
35 import com.eviware.soapui.support.types.StringToStringMap;
36 import com.eviware.soapui.support.xml.JXEditTextArea;
37 import com.eviware.soapui.support.xml.XmlUtils;
38 import com.eviware.soapui.ui.desktop.DesktopPanel;
39 import com.eviware.soapui.ui.support.DefaultDesktopPanel;
40
41 /***
42 * Shows a desktop-panel with the TestStepResult for a WsdlTestRequestStepResult
43 *
44 * @author Ole.Matzura
45 */
46
47 public class ShowMessageExchangeAction extends AbstractAction
48 {
49 private DefaultDesktopPanel desktopPanel;
50 private final MessageExchange messageExchange;
51 private final String ownerName;
52
53 public ShowMessageExchangeAction(MessageExchange messageExchange, String ownerName)
54 {
55 super( "Show Results" );
56 this.ownerName = ownerName;
57 this.messageExchange = messageExchange;
58 }
59
60 public void actionPerformed(ActionEvent e)
61 {
62 try
63 {
64 UISupport.showDesktopPanel(buildFrame());
65 }
66 catch (Exception ex)
67 {
68 SoapUI.logError( ex );
69 }
70 }
71
72 private DesktopPanel buildFrame()
73 {
74 if( desktopPanel == null )
75 {
76 desktopPanel = new DefaultDesktopPanel( "Message Viewer",
77 "Message for " + ownerName, buildContent() );
78 }
79
80 return desktopPanel;
81 }
82
83 private JComponent buildContent()
84 {
85 JTabbedPane messageTabs = new JTabbedPane();
86 messageTabs.addTab( "Request Message", buildRequestTab() );
87 messageTabs.addTab( "Response Message", buildResponseTab() );
88 messageTabs.addTab( "Properties", buildPropertiesTab() );
89 messageTabs.addTab( "Messages", buildMessagesTab() );
90
91 messageTabs.setPreferredSize( new Dimension( 500, 400 ));
92
93 JPanel tabPanel = UISupport.createTabPanel( messageTabs, true );
94
95 Component descriptionPanel = UISupport.buildDescription( "MessageExchange Results", "See the request/response message below", null );
96 tabPanel.add( descriptionPanel, BorderLayout.NORTH );
97
98 return tabPanel;
99 }
100
101 private Component buildPropertiesTab()
102 {
103 StringToStringMap properties = new StringToStringMap();
104 if( messageExchange != null && messageExchange.getProperties() != null )
105 {
106 properties.putAll( messageExchange.getProperties() );
107
108 properties.put( "Timestamp", new Date( messageExchange.getTimestamp() ).toString() );
109 properties.put( "Time Taken", String.valueOf( messageExchange.getTimeTaken() ) );
110 }
111 JTable table = new JTable( new StringToStringMapTableModel( properties, "Name", "Value", false ));
112 return new JScrollPane( table );
113 }
114
115 private Component buildMessagesTab()
116 {
117 String[] messages = messageExchange.getMessages();
118 return messages == null || messages.length == 0 ?
119 new JLabel( "No messages to display" ) : new JScrollPane( new JList( messages ) );
120 }
121
122 private Component buildResponseTab()
123 {
124 JXEditTextArea resultArea = JXEditTextArea.createXmlEditor();
125 if( messageExchange != null )
126 resultArea.setText( XmlUtils.prettyPrintXml( messageExchange.getResponseContent() ) );
127 else
128 resultArea.setText( "- null -" );
129 resultArea.setEditable( false );
130 resultArea.setToolTipText( "Response Content" );
131 JScrollPane scrollPane = new JScrollPane( resultArea );
132
133 if( messageExchange != null )
134 {
135 JSplitPane split = UISupport.createVerticalSplit( new JScrollPane( new JTable(
136 new StringToStringMapTableModel( messageExchange.getResponseHeaders(), "Header", "Value", false)) ), scrollPane );
137 split.setDividerLocation( 150 );
138 return split;
139 }
140
141 return scrollPane;
142 }
143
144 private Component buildRequestTab()
145 {
146 JXEditTextArea resultArea = JXEditTextArea.createXmlEditor();
147 if( messageExchange != null )
148 resultArea.setText( XmlUtils.prettyPrintXml( messageExchange.getRequestContent() ) );
149 else
150 resultArea.setText( "- null -" );
151 resultArea.setEditable( false );
152 resultArea.setToolTipText( "Request Content" );
153 JScrollPane scrollPane = new JScrollPane( resultArea );
154
155 if( messageExchange != null )
156 {
157 JSplitPane split = UISupport.createVerticalSplit( new JScrollPane( new JTable(
158 new StringToStringMapTableModel( messageExchange.getRequestHeaders(), "Header", "Value", false)) ), scrollPane );
159 split.setDividerLocation( 150 );
160 return split;
161 }
162
163 return scrollPane;
164 }
165 }