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