View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2010 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.support.editor.inspectors.jms.property;
14  
15  import java.beans.PropertyChangeEvent;
16  
17  import javax.jms.Message;
18  
19  import com.eviware.soapui.impl.support.AbstractHttpRequest;
20  import com.eviware.soapui.impl.wsdl.submit.transports.jms.HermesJmsRequestTransport;
21  import com.eviware.soapui.impl.wsdl.submit.transports.jms.JMSEndpoint;
22  import com.eviware.soapui.impl.wsdl.submit.transports.jms.JMSHeader;
23  import com.eviware.soapui.impl.wsdl.submit.transports.jms.JMSResponse;
24  import com.eviware.soapui.impl.wsdl.submit.transports.jms.util.JMSUtils;
25  import com.eviware.soapui.impl.wsdl.support.MessageExchangeModelItem;
26  import com.eviware.soapui.model.ModelItem;
27  import com.eviware.soapui.model.iface.MessageExchange;
28  import com.eviware.soapui.model.iface.Submit;
29  import com.eviware.soapui.model.iface.SubmitContext;
30  import com.eviware.soapui.model.iface.SubmitListener;
31  import com.eviware.soapui.support.editor.Editor;
32  import com.eviware.soapui.support.editor.EditorInspector;
33  import com.eviware.soapui.support.editor.inspectors.jms.property.JMSHeaderAndPropertyInspectorModel.AbstractJMSHeaderAndPropertyModel;
34  import com.eviware.soapui.support.editor.registry.RequestInspectorFactory;
35  import com.eviware.soapui.support.editor.registry.ResponseInspectorFactory;
36  import com.eviware.soapui.support.types.StringToStringMap;
37  
38  public class JMSHeaderAndPropertyInspectorFactory implements RequestInspectorFactory, ResponseInspectorFactory
39  {
40  	public static final String INSPECTOR_ID = "JMS Headers and Properties";
41  
42  	public String getInspectorId()
43  	{
44  		return INSPECTOR_ID;
45  	}
46  
47  	public EditorInspector<?> createRequestInspector( Editor<?> editor, ModelItem modelItem )
48  	{
49  		if( modelItem instanceof MessageExchangeModelItem )
50  		{
51  			JMSHeaderAndPropertyInspector inspector = new JMSHeaderAndPropertyInspector(
52  					( JMSHeaderAndPropertyInspectorModel )new MessageExchangeRequestJMSHeaderAndPropertiesModel(
53  							( MessageExchangeModelItem )modelItem ) );
54  			inspector.setEnabled( JMSUtils.checkIfJMS( modelItem ) );
55  			return inspector;
56  		}
57  		return null;
58  	}
59  
60  	public EditorInspector<?> createResponseInspector( Editor<?> editor, ModelItem modelItem )
61  	{
62  
63  		if( modelItem instanceof AbstractHttpRequest<?> )
64  		{
65  			JMSHeaderAndPropertyInspector inspector = new JMSHeaderAndPropertyInspector(
66  					( JMSHeaderAndPropertyInspectorModel )new ResponseJMSHeaderAndPropertiesModel(
67  							( AbstractHttpRequest<?> )modelItem ) );
68  			inspector.setEnabled( JMSUtils.checkIfJMS( modelItem ) );
69  			return inspector;
70  		}
71  		else if( modelItem instanceof MessageExchangeModelItem )
72  		{
73  
74  			JMSHeaderAndPropertyInspector inspector = new JMSHeaderAndPropertyInspector(
75  					( JMSHeaderAndPropertyInspectorModel )new MessageExchangeResponseJMSHeaderAndPropertiesModel(
76  							( MessageExchangeModelItem )modelItem ) );
77  			inspector.setEnabled( JMSUtils.checkIfJMS( modelItem ) );
78  			return inspector;
79  
80  		}
81  		return null;
82  	}
83  
84  	private class ResponseJMSHeaderAndPropertiesModel extends AbstractJMSHeaderAndPropertyModel<AbstractHttpRequest<?>>
85  			implements SubmitListener
86  	{
87  		AbstractHttpRequest<?> request;
88  		JMSHeaderAndPropertyInspector inspector;
89  		StringToStringMap headersAndProperties;
90  
91  		public ResponseJMSHeaderAndPropertiesModel( AbstractHttpRequest<?> wsdlRequest )
92  		{
93  			super( true, wsdlRequest, "jmsHeaderAndProperties" );
94  			this.request = wsdlRequest;
95  			request.addSubmitListener( this );
96  			request.addPropertyChangeListener( this );
97  		}
98  
99  		public void propertyChange( PropertyChangeEvent evt )
100 		{
101 			if( request.getEndpoint() != null && evt.getPropertyName().equals( AbstractHttpRequest.ENDPOINT_PROPERTY ) )
102 			{
103 				inspector.setEnabled( request.getEndpoint().startsWith( JMSEndpoint.JMS_ENDPIONT_PREFIX ) );
104 			}
105 			super.propertyChange( evt );
106 		}
107 
108 		public void release()
109 		{
110 			super.release();
111 
112 			request.removeSubmitListener( this );
113 			request.removePropertyChangeListener( this );
114 		}
115 
116 		public StringToStringMap getJMSHeadersAndProperties()
117 		{
118 			return headersAndProperties;
119 		}
120 
121 		public void afterSubmit( Submit submit, SubmitContext context )
122 		{
123 			headersAndProperties = new StringToStringMap();
124 			JMSResponse jmsResponse = ( JMSResponse )context.getProperty( HermesJmsRequestTransport.JMS_RESPONSE );
125 			if( jmsResponse instanceof JMSResponse )
126 			{
127 				Message message = jmsResponse.getMessageReceive();
128 				if( message != null )
129 					headersAndProperties.putAll( JMSHeader.getMessageHeadersAndProperties( message ).toStringToStringMap() );
130 			}
131 			inspector.getHeadersTableModel().setData( headersAndProperties );
132 		}
133 
134 		public boolean beforeSubmit( Submit submit, SubmitContext context )
135 		{
136 			return true;
137 		}
138 
139 		public void setInspector( JMSHeaderAndPropertyInspector inspector )
140 		{
141 			this.inspector = inspector;
142 		}
143 	}
144 
145 	private class MessageExchangeResponseJMSHeaderAndPropertiesModel extends
146 			AbstractJMSHeaderAndPropertyModel<MessageExchangeModelItem>
147 
148 	{
149 		@SuppressWarnings( "unused" )
150 		MessageExchangeModelItem messageExchangeModelItem;
151 		@SuppressWarnings( "unused" )
152 		JMSHeaderAndPropertyInspector inspector;
153 
154 		public MessageExchangeResponseJMSHeaderAndPropertiesModel( MessageExchangeModelItem messageExchangeModelItem )
155 		{
156 			super( true, messageExchangeModelItem, MessageExchangeModelItem.MESSAGE_EXCHANGE );
157 			this.messageExchangeModelItem = messageExchangeModelItem;
158 		}
159 
160 		public StringToStringMap getJMSHeadersAndProperties()
161 		{
162 			MessageExchange messageExchange = getModelItem().getMessageExchange();
163 			if( messageExchange != null )
164 				return messageExchange.getResponseHeaders().toStringToStringMap();
165 			else
166 				return new StringToStringMap();
167 		}
168 
169 		public void setInspector( JMSHeaderAndPropertyInspector inspector )
170 		{
171 			this.inspector = inspector;
172 		}
173 
174 	}
175 
176 	private class MessageExchangeRequestJMSHeaderAndPropertiesModel extends
177 			AbstractJMSHeaderAndPropertyModel<MessageExchangeModelItem>
178 
179 	{
180 		@SuppressWarnings( "unused" )
181 		MessageExchangeModelItem messageExchangeModelItem;
182 		@SuppressWarnings( "unused" )
183 		JMSHeaderAndPropertyInspector inspector;
184 
185 		public MessageExchangeRequestJMSHeaderAndPropertiesModel( MessageExchangeModelItem messageExchangeModelItem )
186 		{
187 			super( true, messageExchangeModelItem, MessageExchangeModelItem.MESSAGE_EXCHANGE );
188 			this.messageExchangeModelItem = messageExchangeModelItem;
189 		}
190 
191 		public StringToStringMap getJMSHeadersAndProperties()
192 		{
193 			MessageExchange messageExchange = getModelItem().getMessageExchange();
194 			if( messageExchange != null )
195 				return messageExchange.getRequestHeaders().toStringToStringMap();
196 			else
197 				return new StringToStringMap();
198 		}
199 
200 		public void setInspector( JMSHeaderAndPropertyInspector inspector )
201 		{
202 			this.inspector = inspector;
203 		}
204 
205 	}
206 
207 }