1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.support.panels;
14
15 import java.beans.PropertyChangeEvent;
16 import java.beans.PropertyChangeListener;
17
18 import com.eviware.soapui.impl.rest.RestRequestInterface;
19 import com.eviware.soapui.impl.support.components.ModelItemXmlEditor;
20 import com.eviware.soapui.impl.support.http.HttpRequestInterface;
21 import com.eviware.soapui.impl.wsdl.submit.transports.http.HttpResponse;
22 import com.eviware.soapui.model.ModelItem;
23 import com.eviware.soapui.support.editor.xml.support.AbstractXmlDocument;
24
25 public abstract class AbstractHttpXmlRequestDesktopPanel<T extends ModelItem, T2 extends HttpRequestInterface<?>>
26 extends AbstractHttpRequestDesktopPanel<T, T2>
27 {
28
29 public AbstractHttpXmlRequestDesktopPanel( T modelItem, T2 requestItem )
30 {
31 super( modelItem, requestItem );
32 }
33
34 @Override
35 protected ModelItemXmlEditor<?, ?> buildRequestEditor()
36 {
37 return new HttpRequestMessageEditor( getRequest() );
38 }
39
40 @Override
41 protected ModelItemXmlEditor<?, ?> buildResponseEditor()
42 {
43 return new HttpResponseMessageEditor( getRequest() );
44 }
45
46 public class HttpRequestMessageEditor extends
47 AbstractHttpRequestDesktopPanel<?, ?>.AbstractHttpRequestMessageEditor<HttpRequestDocument>
48 {
49 public HttpRequestMessageEditor( HttpRequestInterface<?> modelItem )
50 {
51 super( new HttpRequestDocument( modelItem ) );
52 }
53 }
54
55 public class HttpResponseMessageEditor extends
56 AbstractHttpRequestDesktopPanel<?, ?>.AbstractHttpResponseMessageEditor<HttpResponseDocument>
57 {
58 public HttpResponseMessageEditor( HttpRequestInterface<?> modelItem )
59 {
60 super( new HttpResponseDocument( modelItem ) );
61 }
62 }
63
64 public class HttpRequestDocument extends AbstractXmlDocument implements PropertyChangeListener
65 {
66 private final HttpRequestInterface<?> modelItem;
67 private boolean updating;
68
69 public HttpRequestDocument( HttpRequestInterface<?> modelItem )
70 {
71 this.modelItem = modelItem;
72
73 modelItem.addPropertyChangeListener( this );
74 }
75
76 public HttpRequestInterface<?> getRequest()
77 {
78 return modelItem;
79 }
80
81 public String getXml()
82 {
83 return getRequest().getRequestContent();
84 }
85
86 @Override
87 public void release()
88 {
89 super.release();
90 modelItem.removePropertyChangeListener( this );
91 }
92
93 public void setXml( String xml )
94 {
95 if( !updating )
96 {
97 updating = true;
98 getRequest().setRequestContent( xml );
99 updating = false;
100 }
101 }
102
103 public void propertyChange( PropertyChangeEvent evt )
104 {
105 if( evt.getPropertyName().equals( RestRequestInterface.REQUEST_PROPERTY ) && !updating )
106 {
107 updating = true;
108 fireXmlChanged( ( String )evt.getOldValue(), ( String )evt.getNewValue() );
109 updating = false;
110 }
111 }
112 }
113
114 public class HttpResponseDocument extends AbstractXmlDocument implements PropertyChangeListener
115 {
116 private final HttpRequestInterface<?> modelItem;
117
118 public HttpResponseDocument( HttpRequestInterface<?> modelItem )
119 {
120 this.modelItem = modelItem;
121
122 modelItem.addPropertyChangeListener( RestRequestInterface.RESPONSE_PROPERTY, this );
123 }
124
125 public HttpRequestInterface<?> getRequest()
126 {
127 return modelItem;
128 }
129
130 public String getXml()
131 {
132 return modelItem.getResponseContentAsXml();
133 }
134
135 public void setXml( String xml )
136 {
137 HttpResponse response = getRequest().getResponse();
138 if( response != null )
139 response.setResponseContent( xml );
140 }
141
142 public void propertyChange( PropertyChangeEvent evt )
143 {
144 fireXmlChanged( evt.getOldValue() == null ? null : ( ( HttpResponse )evt.getOldValue() ).getContentAsString(),
145 getXml() );
146 }
147
148 public void release()
149 {
150 super.release();
151 modelItem.removePropertyChangeListener( RestRequestInterface.RESPONSE_PROPERTY, this );
152 }
153 }
154 }