1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.wsdl.mock;
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.BorderFactory;
23 import javax.swing.JComponent;
24 import javax.swing.JLabel;
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.support.UISupport;
34 import com.eviware.soapui.support.xml.JXEditTextArea;
35 import com.eviware.soapui.support.xml.XmlUtils;
36 import com.eviware.soapui.ui.desktop.DesktopPanel;
37 import com.eviware.soapui.ui.support.DefaultDesktopPanel;
38 import com.jgoodies.forms.builder.ButtonBarBuilder;
39
40 /***
41 * Shows a desktop-panel with the MessageExchange for a WsdlMockResult
42 *
43 * @author Ole.Matzura
44 */
45
46 public class ViewWsdlMockResultAction extends AbstractAction
47 {
48 private final WsdlMockResult result;
49 private DefaultDesktopPanel desktopPanel;
50
51 public ViewWsdlMockResultAction(WsdlMockResult result)
52 {
53 super( "Show Results" );
54
55 this.result = result;
56 }
57
58 public void actionPerformed(ActionEvent e)
59 {
60 try
61 {
62 if( result.isDiscarded() )
63 UISupport.showInfoMessage( "Request has been discarded.." );
64 else
65 UISupport.showDesktopPanel(buildFrame());
66 }
67 catch (Exception ex)
68 {
69 SoapUI.logError( ex );
70 }
71 }
72
73 private DesktopPanel buildFrame()
74 {
75 if( desktopPanel == null )
76 {
77 String title = "Mock Result for [" + result.getMockResponse().getName() + "]";
78 desktopPanel = new DefaultDesktopPanel( title, title, buildContent() );
79 }
80
81 return desktopPanel;
82 }
83
84 private JComponent buildContent()
85 {
86 JTabbedPane messageTabs = new JTabbedPane();
87 messageTabs.addTab( "Request", buildRequestTab() );
88 messageTabs.addTab( "Response", buildResponseTab() );
89 messageTabs.setPreferredSize( new Dimension( 500, 400 ));
90
91 JPanel panel = new JPanel( new BorderLayout() );
92 panel.add( UISupport.createTabPanel( messageTabs, true ), BorderLayout.CENTER );
93
94 ButtonBarBuilder builder = new ButtonBarBuilder();
95 builder.addFixed( new JLabel( "Mock Request handled at " + new Date( result.getTimestamp() ) +
96 ", time taken: " + result.getTimeTaken() + "ms"));
97 builder.addGlue();
98 builder.setBorder( BorderFactory.createEmptyBorder( 2, 2, 2, 2 ) );
99 panel.add( builder.getPanel(), BorderLayout.PAGE_START );
100
101 return panel;
102 }
103
104 private Component buildResponseTab()
105 {
106 JXEditTextArea responseArea = JXEditTextArea.createXmlEditor();
107 responseArea.setText( XmlUtils.prettyPrintXml( result.getResponseContent() ) );
108 responseArea.setEditable( false );
109 responseArea.setToolTipText( "Response Content" );
110 JScrollPane scrollPane = new JScrollPane( responseArea );
111
112 JSplitPane split = UISupport.createVerticalSplit( new JScrollPane( new JTable(
113 new StringToStringMapTableModel( result.getResponseHeaders(), "Header", "Value", false)) ), scrollPane );
114 split.setDividerLocation( 150 );
115 return split;
116 }
117
118 private Component buildRequestTab()
119 {
120 JXEditTextArea resultArea = JXEditTextArea.createXmlEditor();
121 resultArea.setText( XmlUtils.prettyPrintXml( result.getMockRequest().getRequestContent() ) );
122 resultArea.setEditable( false );
123 resultArea.setToolTipText( "Request Content" );
124 JScrollPane scrollPane = new JScrollPane( resultArea );
125
126 JSplitPane split = UISupport.createVerticalSplit( new JScrollPane( new JTable(
127 new StringToStringMapTableModel( result.getMockRequest().getRequestHeaders(), "Header", "Value", false)) ), scrollPane );
128 split.setDividerLocation( 150 );
129 return split;
130 }
131 }