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 			request.removeSubmitListener(this);
111 			request.removePropertyChangeListener(this);
112 		}
113 
114 		public StringToStringMap getJMSHeadersAndProperties()
115 		{
116 			return headersAndProperties;
117 		}
118 
119 		public void afterSubmit(Submit submit, SubmitContext context)
120 		{
121 			headersAndProperties = new StringToStringMap();
122 			JMSResponse jmsResponse = (JMSResponse) context.getProperty(HermesJmsRequestTransport.JMS_RESPONSE);
123 			if (jmsResponse instanceof JMSResponse)
124 			{
125 				Message message = jmsResponse.getMessageReceive();
126 				if (message != null)
127 					headersAndProperties.putAll(JMSHeader.getMessageHeadersAndProperties(message));
128 			}
129 			inspector.getHeadersTableModel().setData(headersAndProperties);
130 		}
131 
132 		public boolean beforeSubmit(Submit submit, SubmitContext context)
133 		{
134 			return true;
135 		}
136 
137 		public void setInspector(JMSHeaderAndPropertyInspector inspector)
138 		{
139 			this.inspector = inspector;
140 		}
141 	}
142 
143 	private class MessageExchangeResponseJMSHeaderAndPropertiesModel extends
144 			AbstractJMSHeaderAndPropertyModel<MessageExchangeModelItem>
145 
146 	{
147 		MessageExchangeModelItem messageExchangeModelItem;
148 		JMSHeaderAndPropertyInspector inspector;
149 
150 		public MessageExchangeResponseJMSHeaderAndPropertiesModel(MessageExchangeModelItem messageExchangeModelItem)
151 		{
152 			super(true, messageExchangeModelItem, MessageExchangeModelItem.MESSAGE_EXCHANGE);
153 			this.messageExchangeModelItem = messageExchangeModelItem;
154 		}
155 
156 		public StringToStringMap getJMSHeadersAndProperties()
157 		{
158 			MessageExchange messageExchange = getModelItem().getMessageExchange();
159 			if (messageExchange != null)
160 				return messageExchange.getResponseHeaders();
161 			else
162 				return new StringToStringMap();		}
163 
164 		public void setInspector(JMSHeaderAndPropertyInspector inspector)
165 		{
166 			this.inspector = inspector;
167 		}
168 
169 	}
170 
171 	private class MessageExchangeRequestJMSHeaderAndPropertiesModel extends
172 			AbstractJMSHeaderAndPropertyModel<MessageExchangeModelItem>
173 
174 	{
175 		MessageExchangeModelItem messageExchangeModelItem;
176 		JMSHeaderAndPropertyInspector inspector;
177 
178 		public MessageExchangeRequestJMSHeaderAndPropertiesModel(MessageExchangeModelItem messageExchangeModelItem)
179 		{
180 			super(true, messageExchangeModelItem, MessageExchangeModelItem.MESSAGE_EXCHANGE);
181 			this.messageExchangeModelItem = messageExchangeModelItem;
182 		}
183 
184 		public StringToStringMap getJMSHeadersAndProperties()
185 		{
186 			MessageExchange messageExchange = getModelItem().getMessageExchange();
187 			if (messageExchange != null)
188 				return messageExchange.getRequestHeaders();
189 			else
190 				return new StringToStringMap();
191 		}
192 
193 		public void setInspector(JMSHeaderAndPropertyInspector inspector)
194 		{
195 			this.inspector = inspector;
196 		}
197 
198 	}
199 
200 }