1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.wsdl.teststeps.actions;
14
15 import com.eviware.soapui.SoapUI;
16 import com.eviware.soapui.impl.wsdl.panels.request.StringToStringMapTableModel;
17 import com.eviware.soapui.impl.wsdl.support.MessageExchangeRequestMessageEditor;
18 import com.eviware.soapui.impl.wsdl.support.MessageExchangeResponseMessageEditor;
19 import com.eviware.soapui.model.iface.MessageExchange;
20 import com.eviware.soapui.model.testsuite.AssertedXPath;
21 import com.eviware.soapui.model.testsuite.RequestAssertedMessageExchange;
22 import com.eviware.soapui.model.testsuite.ResponseAssertedMessageExchange;
23 import com.eviware.soapui.support.UISupport;
24 import com.eviware.soapui.support.types.StringToStringMap;
25 import com.eviware.soapui.ui.desktop.DesktopPanel;
26 import com.eviware.soapui.ui.support.DefaultDesktopPanel;
27 import org.jdesktop.swingx.JXTable;
28
29 import javax.swing.*;
30 import javax.swing.table.DefaultTableModel;
31 import java.awt.*;
32 import java.awt.event.ActionEvent;
33 import java.util.ArrayList;
34 import java.util.Arrays;
35 import java.util.Date;
36 import java.util.List;
37
38 /***
39 * Shows a desktop-panel with the TestStepResult for a WsdlTestRequestStepResult
40 *
41 * @author Ole.Matzura
42 */
43
44 public class ShowMessageExchangeAction extends AbstractAction
45 {
46 private DefaultDesktopPanel desktopPanel;
47 private final MessageExchange messageExchange;
48 private final String ownerName;
49 private MessageExchangeResponseMessageEditor responseMessageEditor;
50 private MessageExchangeRequestMessageEditor requestMessageEditor;
51
52 public ShowMessageExchangeAction(MessageExchange messageExchange, String ownerName)
53 {
54 super( "Show Message Exchange" );
55 this.ownerName = ownerName;
56 this.messageExchange = messageExchange;
57 }
58
59 public void actionPerformed(ActionEvent e)
60 {
61 try
62 {
63 UISupport.showDesktopPanel(buildFrame());
64 }
65 catch (Exception ex)
66 {
67 SoapUI.logError( ex );
68 }
69 }
70
71 private DesktopPanel buildFrame()
72 {
73 if( desktopPanel == null )
74 {
75 desktopPanel = new DefaultDesktopPanel( "Message Viewer",
76 "Message for " + ownerName, buildContent() )
77 {
78 @Override
79 public boolean onClose( boolean canCancel )
80 {
81
82
83
84 return super.onClose( canCancel );
85 }
86 };
87 }
88
89 return desktopPanel;
90 }
91
92 private JComponent buildContent()
93 {
94 JTabbedPane messageTabs = new JTabbedPane();
95 messageTabs.addTab( "Request Message", buildRequestTab() );
96 messageTabs.addTab( "Response Message", buildResponseTab() );
97 messageTabs.addTab( "Properties", buildPropertiesTab() );
98
99 String[] messages = messageExchange.getMessages();
100 if( messages != null && messages.length > 0 )
101 messageTabs.addTab( "Messages", buildMessagesTab() );
102
103 if( getAssertedXPaths().size() > 0 )
104 messageTabs.addTab( "XPath Assertions", buildAssertionsTab() );
105
106 messageTabs.setPreferredSize( new Dimension( 500, 400 ));
107
108 JPanel tabPanel = UISupport.createTabPanel( messageTabs, true );
109
110 Component descriptionPanel = UISupport.buildDescription( "MessageExchange Results", "See the request/response message below", null );
111 tabPanel.add( descriptionPanel, BorderLayout.NORTH );
112
113 return tabPanel;
114 }
115
116 private Component buildAssertionsTab()
117 {
118 List<AssertedXPath> assertedXPaths = getAssertedXPaths();
119
120 DefaultTableModel tm = new DefaultTableModel( assertedXPaths.size(), 2 );
121 tm.setColumnIdentifiers( new String[] { "Label", "XPath"} );
122
123 JXTable table = new JXTable( tm );
124 table.setHorizontalScrollEnabled( true );
125 table.getColumn( 0 ).setPreferredWidth( 100 );
126
127 for( int c = 0; c < assertedXPaths.size(); c++ )
128 {
129 tm.setValueAt( assertedXPaths.get( c ).getLabel(), c, 0 );
130 tm.setValueAt( assertedXPaths.get( c ).getPath(), c, 1 );
131 }
132
133 return new JScrollPane( table );
134 }
135
136 private List<AssertedXPath> getAssertedXPaths()
137 {
138 List<AssertedXPath> assertedXPaths = new ArrayList<AssertedXPath>();
139
140 if( messageExchange instanceof RequestAssertedMessageExchange )
141 {
142 AssertedXPath[] xpaths = ((RequestAssertedMessageExchange)messageExchange).getAssertedXPathsForRequest();
143 if( xpaths != null && xpaths.length > 0 )
144 {
145 assertedXPaths.addAll( Arrays.asList( xpaths ) );
146 }
147 }
148
149 if( messageExchange instanceof ResponseAssertedMessageExchange )
150 {
151 AssertedXPath[] xpaths = ((ResponseAssertedMessageExchange)messageExchange).getAssertedXPathsForResponse();
152 if( xpaths != null && xpaths.length > 0 )
153 {
154 assertedXPaths.addAll( Arrays.asList( xpaths ) );
155 }
156 }
157 return assertedXPaths;
158 }
159
160 private Component buildPropertiesTab()
161 {
162 StringToStringMap properties = new StringToStringMap();
163 if( messageExchange != null && messageExchange.getProperties() != null )
164 {
165 properties.putAll( messageExchange.getProperties() );
166
167
168
169
170
171
172 properties.put( "Timestamp", new Date( messageExchange.getTimestamp() ).toString() );
173 properties.put( "Time Taken", String.valueOf( messageExchange.getTimeTaken() ) );
174 }
175 JTable table = new JTable( new StringToStringMapTableModel( properties, "Name", "Value", false ));
176 return new JScrollPane( table );
177 }
178
179 private Component buildMessagesTab()
180 {
181 String[] messages = messageExchange.getMessages();
182 return messages == null || messages.length == 0 ?
183 new JLabel( "No messages to display" ) : new JScrollPane( new JList( messages ) );
184 }
185
186 private Component buildResponseTab()
187 {
188 responseMessageEditor = new MessageExchangeResponseMessageEditor( messageExchange );
189 return responseMessageEditor;
190 }
191
192 private Component buildRequestTab()
193 {
194 requestMessageEditor = new MessageExchangeRequestMessageEditor( messageExchange );
195 return requestMessageEditor;
196 }
197 }