1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.rest.panels.request.views.json;
14
15 import java.awt.BorderLayout;
16 import java.awt.Component;
17 import java.beans.PropertyChangeEvent;
18 import java.beans.PropertyChangeListener;
19
20 import javax.swing.JComponent;
21 import javax.swing.JPanel;
22 import javax.swing.JScrollPane;
23
24 import net.sf.json.JSON;
25 import net.sf.json.JSONSerializer;
26
27 import com.eviware.soapui.impl.rest.support.handlers.JsonMediaTypeHandler;
28 import com.eviware.soapui.impl.support.panels.AbstractHttpXmlRequestDesktopPanel.HttpResponseDocument;
29 import com.eviware.soapui.impl.wsdl.support.MessageExchangeModelItem;
30 import com.eviware.soapui.model.iface.MessageExchange;
31 import com.eviware.soapui.support.UISupport;
32 import com.eviware.soapui.support.components.JXToolBar;
33 import com.eviware.soapui.support.editor.views.AbstractXmlEditorView;
34 import com.eviware.soapui.support.editor.xml.XmlEditor;
35 import com.eviware.soapui.support.xml.JXEditTextArea;
36
37 @SuppressWarnings( "unchecked" )
38 public class JsonResponseMessageExchangeView extends AbstractXmlEditorView<HttpResponseDocument> implements
39 PropertyChangeListener
40 {
41 private final MessageExchangeModelItem messageExchangeModelItem;
42 private JPanel contentPanel;
43 private JXEditTextArea contentEditor;
44 private boolean updatingRequest;
45 private JPanel panel;
46
47 public JsonResponseMessageExchangeView( XmlEditor editor, MessageExchangeModelItem messageExchangeModelItem )
48 {
49 super( "JSON", editor, JsonResponseViewFactory.VIEW_ID );
50 this.messageExchangeModelItem = messageExchangeModelItem;
51
52 messageExchangeModelItem.addPropertyChangeListener( this );
53 }
54
55 public JComponent getComponent()
56 {
57 if( panel == null )
58 {
59 panel = new JPanel( new BorderLayout() );
60
61 panel.add( buildToolbar(), BorderLayout.NORTH );
62 panel.add( buildContent(), BorderLayout.CENTER );
63 panel.add( buildStatus(), BorderLayout.SOUTH );
64 }
65
66 return panel;
67 }
68
69 @Override
70 public void release()
71 {
72 super.release();
73
74 messageExchangeModelItem.removePropertyChangeListener( this );
75 }
76
77 private Component buildStatus()
78 {
79 return new JPanel();
80 }
81
82 private Component buildContent()
83 {
84 contentPanel = new JPanel( new BorderLayout() );
85
86 contentEditor = JXEditTextArea.createJavaScriptEditor();
87 MessageExchange me = messageExchangeModelItem.getMessageExchange();
88 if( me != null )
89 setEditorContent( me );
90
91 contentPanel.add( new JScrollPane( contentEditor ) );
92 contentEditor.setEditable( false );
93
94 return contentPanel;
95 }
96
97 protected void setEditorContent( MessageExchange me )
98 {
99 if( me == null )
100 {
101 contentEditor.setText( "" );
102 }
103 else
104 {
105 String content = "<Not JSON content>";
106
107 if( JsonMediaTypeHandler.couldBeJsonContent( me.getResponseHeaders().get( "Content-Type", "" ) ) )
108 {
109 try
110 {
111 JSON json = JSONSerializer.toJSON( me.getResponseContent() );
112 if( json.isEmpty() )
113 content = "<Empty JSON content>";
114 else
115 content = json.toString( 3 );
116 }
117 catch( Throwable e )
118 {
119 if( !"Invalid JSON String".equals( e.getMessage() ) )
120 e.printStackTrace();
121 else
122 content = me.getResponseContent();
123 }
124
125 contentEditor.setText( content );
126 }
127 else
128 {
129 contentEditor.setText( "<Not JSON content>" );
130 }
131 }
132 }
133
134 private Component buildToolbar()
135 {
136 JXToolBar toolbar = UISupport.createToolbar();
137
138 return toolbar;
139 }
140
141 public void propertyChange( PropertyChangeEvent evt )
142 {
143 if( evt.getPropertyName().equals( "messageExchange" ) && !updatingRequest )
144 {
145 setEditorContent( ( ( MessageExchange )evt.getNewValue() ) );
146 }
147 }
148
149 @Override
150 public void setXml( String xml )
151 {
152 }
153
154 public boolean saveDocument( boolean validate )
155 {
156 return false;
157 }
158
159 public void setEditable( boolean enabled )
160 {
161 }
162 }