/* * SoapUI, Copyright (C) 2004-2016 SmartBear Software * * Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent * versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * * http://ec.europa.eu/idabc/eupl * * Unless required by applicable law or agreed to in writing, software distributed under the Licence is * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the Licence for the specific language governing permissions and limitations * under the Licence. */ package com.eviware.soapui.support.editor.inspectors.jms.property; import com.eviware.soapui.impl.support.AbstractHttpRequest; import com.eviware.soapui.impl.wsdl.submit.transports.jms.HermesJmsRequestTransport; import com.eviware.soapui.impl.wsdl.submit.transports.jms.JMSEndpoint; import com.eviware.soapui.impl.wsdl.submit.transports.jms.JMSHeader; import com.eviware.soapui.impl.wsdl.submit.transports.jms.JMSResponse; import com.eviware.soapui.impl.wsdl.submit.transports.jms.util.JMSUtils; import com.eviware.soapui.impl.wsdl.support.MessageExchangeModelItem; import com.eviware.soapui.model.ModelItem; import com.eviware.soapui.model.iface.MessageExchange; import com.eviware.soapui.model.iface.Submit; import com.eviware.soapui.model.iface.SubmitContext; import com.eviware.soapui.model.iface.SubmitListener; import com.eviware.soapui.support.editor.Editor; import com.eviware.soapui.support.editor.EditorInspector; import com.eviware.soapui.support.editor.inspectors.jms.property.JMSHeaderAndPropertyInspectorModel.AbstractJMSHeaderAndPropertyModel; import com.eviware.soapui.support.editor.registry.RequestInspectorFactory; import com.eviware.soapui.support.editor.registry.ResponseInspectorFactory; import com.eviware.soapui.support.types.StringToStringMap; import javax.jms.Message; import java.beans.PropertyChangeEvent; public class JMSHeaderAndPropertyInspectorFactory implements RequestInspectorFactory, ResponseInspectorFactory { public static final String INSPECTOR_ID = "JMS Headers and Properties"; public String getInspectorId() { return INSPECTOR_ID; } public EditorInspector<?> createRequestInspector(Editor<?> editor, ModelItem modelItem) { if (modelItem instanceof MessageExchangeModelItem) { JMSHeaderAndPropertyInspector inspector = new JMSHeaderAndPropertyInspector( (JMSHeaderAndPropertyInspectorModel) new MessageExchangeRequestJMSHeaderAndPropertiesModel( (MessageExchangeModelItem) modelItem)); inspector.setEnabled(JMSUtils.checkIfJMS(modelItem)); return inspector; } return null; } public EditorInspector<?> createResponseInspector(Editor<?> editor, ModelItem modelItem) { if (modelItem instanceof AbstractHttpRequest<?>) { JMSHeaderAndPropertyInspector inspector = new JMSHeaderAndPropertyInspector( (JMSHeaderAndPropertyInspectorModel) new ResponseJMSHeaderAndPropertiesModel( (AbstractHttpRequest<?>) modelItem)); inspector.setEnabled(JMSUtils.checkIfJMS(modelItem)); return inspector; } else if (modelItem instanceof MessageExchangeModelItem) { JMSHeaderAndPropertyInspector inspector = new JMSHeaderAndPropertyInspector( (JMSHeaderAndPropertyInspectorModel) new MessageExchangeResponseJMSHeaderAndPropertiesModel( (MessageExchangeModelItem) modelItem)); inspector.setEnabled(JMSUtils.checkIfJMS(modelItem)); return inspector; } return null; } private class ResponseJMSHeaderAndPropertiesModel extends AbstractJMSHeaderAndPropertyModel<AbstractHttpRequest<?>> implements SubmitListener { AbstractHttpRequest<?> request; JMSHeaderAndPropertyInspector inspector; StringToStringMap headersAndProperties; public ResponseJMSHeaderAndPropertiesModel(AbstractHttpRequest<?> wsdlRequest) { super(true, wsdlRequest, "jmsHeaderAndProperties"); this.request = wsdlRequest; request.addSubmitListener(this); request.addPropertyChangeListener(this); } public void propertyChange(PropertyChangeEvent evt) { if (request.getEndpoint() != null && evt.getPropertyName().equals(AbstractHttpRequest.ENDPOINT_PROPERTY)) { inspector.setEnabled(request.getEndpoint().startsWith(JMSEndpoint.JMS_ENDPOINT_PREFIX)); } super.propertyChange(evt); } public void release() { super.release(); request.removeSubmitListener(this); request.removePropertyChangeListener(this); } public StringToStringMap getJMSHeadersAndProperties() { return headersAndProperties; } public void afterSubmit(Submit submit, SubmitContext context) { headersAndProperties = new StringToStringMap(); JMSResponse jmsResponse = (JMSResponse) context.getProperty(HermesJmsRequestTransport.JMS_RESPONSE); if (jmsResponse instanceof JMSResponse) { Message message = jmsResponse.getMessageReceive(); if (message != null) { headersAndProperties.putAll(JMSHeader.getMessageHeadersAndProperties(message).toStringToStringMap()); } } inspector.getHeadersTableModel().setData(headersAndProperties); } public boolean beforeSubmit(Submit submit, SubmitContext context) { return true; } public void setInspector(JMSHeaderAndPropertyInspector inspector) { this.inspector = inspector; } } private class MessageExchangeResponseJMSHeaderAndPropertiesModel extends AbstractJMSHeaderAndPropertyModel<MessageExchangeModelItem> { @SuppressWarnings("unused") MessageExchangeModelItem messageExchangeModelItem; @SuppressWarnings("unused") JMSHeaderAndPropertyInspector inspector; public MessageExchangeResponseJMSHeaderAndPropertiesModel(MessageExchangeModelItem messageExchangeModelItem) { super(true, messageExchangeModelItem, MessageExchangeModelItem.MESSAGE_EXCHANGE); this.messageExchangeModelItem = messageExchangeModelItem; } public StringToStringMap getJMSHeadersAndProperties() { MessageExchange messageExchange = getModelItem().getMessageExchange(); if (messageExchange != null) { return messageExchange.getResponseHeaders().toStringToStringMap(); } else { return new StringToStringMap(); } } public void setInspector(JMSHeaderAndPropertyInspector inspector) { this.inspector = inspector; } } private class MessageExchangeRequestJMSHeaderAndPropertiesModel extends AbstractJMSHeaderAndPropertyModel<MessageExchangeModelItem> { @SuppressWarnings("unused") MessageExchangeModelItem messageExchangeModelItem; @SuppressWarnings("unused") JMSHeaderAndPropertyInspector inspector; public MessageExchangeRequestJMSHeaderAndPropertiesModel(MessageExchangeModelItem messageExchangeModelItem) { super(true, messageExchangeModelItem, MessageExchangeModelItem.MESSAGE_EXCHANGE); this.messageExchangeModelItem = messageExchangeModelItem; } public StringToStringMap getJMSHeadersAndProperties() { MessageExchange messageExchange = getModelItem().getMessageExchange(); if (messageExchange != null && messageExchange.getRequestHeaders() != null) { return messageExchange.getRequestHeaders().toStringToStringMap(); } else { return new StringToStringMap(); } } public void setInspector(JMSHeaderAndPropertyInspector inspector) { this.inspector = inspector; } } }