View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2009 eviware.com 
3    *
4    *  soapUI is free software; you can redistribute it and/or modify it under the 
5    *  terms of version 2.1 of the GNU Lesser General Public License as published by 
6    *  the Free Software Foundation.
7    *
8    *  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 
9    *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
10   *  See the GNU Lesser General Public License for more details at gnu.org.
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 }