/* * 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.httpheaders; import com.eviware.soapui.impl.support.AbstractHttpRequest; import com.eviware.soapui.impl.support.AbstractHttpRequestInterface; import com.eviware.soapui.impl.wsdl.WsdlRequest; import com.eviware.soapui.impl.wsdl.mock.WsdlMockResponse; import com.eviware.soapui.impl.wsdl.panels.teststeps.amf.AMFRequest; import com.eviware.soapui.impl.wsdl.panels.teststeps.amf.AMFResponse; import com.eviware.soapui.impl.wsdl.submit.transports.jms.JMSEndpoint; import com.eviware.soapui.impl.wsdl.submit.transports.jms.util.JMSUtils; import com.eviware.soapui.impl.wsdl.support.MessageExchangeModelItem; import com.eviware.soapui.impl.wsdl.teststeps.AMFRequestTestStep; import com.eviware.soapui.impl.wsdl.teststeps.AMFTestStepResult; import com.eviware.soapui.model.ModelItem; import com.eviware.soapui.model.iface.MessageExchange; import com.eviware.soapui.model.mock.MockResponse; import com.eviware.soapui.support.editor.Editor; import com.eviware.soapui.support.editor.EditorInspector; import com.eviware.soapui.support.editor.inspectors.AbstractXmlInspector; import com.eviware.soapui.support.editor.inspectors.httpheaders.HttpHeadersInspectorModel.AbstractHeadersModel; import com.eviware.soapui.support.editor.registry.RequestInspectorFactory; import com.eviware.soapui.support.editor.registry.ResponseInspectorFactory; import com.eviware.soapui.support.types.StringToStringsMap; import java.beans.PropertyChangeEvent; public class HttpHeadersInspectorFactory implements RequestInspectorFactory, ResponseInspectorFactory { public static final String INSPECTOR_ID = "HTTP Headers"; public String getInspectorId() { return INSPECTOR_ID; } public EditorInspector<?> createRequestInspector(Editor<?> editor, ModelItem modelItem) { if (modelItem instanceof AbstractHttpRequestInterface<?>) { HttpHeadersInspector inspector = new HttpHeadersInspector(new WsdlRequestHeadersModel( (AbstractHttpRequest<?>) modelItem)); inspector.setEnabled(!JMSUtils.checkIfJMS(modelItem)); return inspector; } else if (modelItem instanceof WsdlMockResponse) { HttpHeadersInspector inspector = new HttpHeadersInspector(new WsdlMockResponseRequestHeadersModel( (WsdlMockResponse) modelItem)); inspector.setEnabled(!JMSUtils.checkIfJMS(modelItem)); return inspector; } else if (modelItem instanceof MessageExchangeModelItem) { if (((MessageExchangeModelItem) modelItem).getMessageExchange() instanceof AMFTestStepResult) { HttpHeadersInspector inspector = new HttpHeadersInspector(new AMFMessageExchangeRequestHTTPHeadersModel( (MessageExchangeModelItem) modelItem)); inspector.setEnabled(true); return inspector; } HttpHeadersInspector inspector = new HttpHeadersInspector(new WsdlMessageExchangeRequestHeadersModel( (MessageExchangeModelItem) modelItem)); inspector.setEnabled(!JMSUtils.checkIfJMS(modelItem)); return inspector; } else if (modelItem instanceof AMFRequestTestStep) { HttpHeadersInspector inspector = new HttpHeadersInspector(new AMFRequestHeadersModel( (AMFRequestTestStep) modelItem)); inspector.setEnabled(!JMSUtils.checkIfJMS(modelItem)); return inspector; } return null; } public EditorInspector<?> createResponseInspector(Editor<?> editor, ModelItem modelItem) { if (modelItem instanceof AbstractHttpRequestInterface<?>) { HttpHeadersInspector inspector = new HttpHeadersInspector(new WsdlRequestResponseHeadersModel( (AbstractHttpRequest<?>) modelItem)); inspector.setEnabled(!JMSUtils.checkIfJMS(modelItem)); return inspector; } else if (modelItem instanceof WsdlMockResponse) { HttpHeadersInspector inspector = new HttpHeadersInspector(new MockResponseHeadersModel((WsdlMockResponse) modelItem)); inspector.setEnabled(!JMSUtils.checkIfJMS(modelItem)); return inspector; } else if (modelItem instanceof MessageExchangeModelItem) { if (((MessageExchangeModelItem) modelItem).getMessageExchange() instanceof AMFTestStepResult) { HttpHeadersInspector inspector = new HttpHeadersInspector(new AMFMessageExchangeResponseHTTPHeadersModel( (MessageExchangeModelItem) modelItem)); inspector.setEnabled(true); return inspector; } HttpHeadersInspector inspector = new HttpHeadersInspector(new WsdlMessageExchangeResponseHeadersModel( (MessageExchangeModelItem) modelItem)); inspector.setEnabled(!JMSUtils.checkIfJMS(modelItem)); return inspector; } else if (modelItem instanceof AMFRequestTestStep) { HttpHeadersInspector inspector = new HttpHeadersInspector(new AMFResponseHeadersModel( (AMFRequestTestStep) modelItem)); inspector.setEnabled(!JMSUtils.checkIfJMS(modelItem)); return inspector; } return null; } private class WsdlMessageExchangeRequestHeadersModel extends AbstractHeadersModel<MessageExchangeModelItem> { public WsdlMessageExchangeRequestHeadersModel(MessageExchangeModelItem request) { super(true, request, MessageExchangeModelItem.MESSAGE_EXCHANGE); } public StringToStringsMap getHeaders() { MessageExchange messageExchange = getModelItem().getMessageExchange(); return messageExchange == null ? new StringToStringsMap() : messageExchange.getRequestHeaders(); } } private class AMFMessageExchangeRequestHTTPHeadersModel extends AbstractHeadersModel<MessageExchangeModelItem> { public AMFMessageExchangeRequestHTTPHeadersModel(MessageExchangeModelItem request) { super(true, request, MessageExchangeModelItem.MESSAGE_EXCHANGE); } public StringToStringsMap getHeaders() { if (getModelItem().getMessageExchange() instanceof AMFTestStepResult) { AMFTestStepResult messageExchange = (AMFTestStepResult) getModelItem().getMessageExchange(); return ((AMFRequestTestStep) messageExchange.getTestStep()).getHttpHeaders(); } return new StringToStringsMap(); } } private class AMFMessageExchangeResponseHTTPHeadersModel extends AbstractHeadersModel<MessageExchangeModelItem> { public AMFMessageExchangeResponseHTTPHeadersModel(MessageExchangeModelItem modelItem) { super(true, modelItem, MessageExchangeModelItem.MESSAGE_EXCHANGE); } public StringToStringsMap getHeaders() { if (getModelItem().getMessageExchange() instanceof AMFTestStepResult) { AMFTestStepResult messageExchange = (AMFTestStepResult) getModelItem().getMessageExchange(); return ((AMFResponse) messageExchange.getResponse()).getResponseHeaders(); } return new StringToStringsMap(); } } private class WsdlMessageExchangeResponseHeadersModel extends AbstractHeadersModel<MessageExchangeModelItem> { public WsdlMessageExchangeResponseHeadersModel(MessageExchangeModelItem response) { super(true, response, MessageExchangeModelItem.MESSAGE_EXCHANGE); } public StringToStringsMap getHeaders() { MessageExchange messageExchange = getModelItem().getMessageExchange(); return messageExchange == null ? new StringToStringsMap() : messageExchange.getResponseHeaders(); } } private class WsdlRequestHeadersModel extends AbstractHeadersModel<AbstractHttpRequest<?>> { AbstractHttpRequest<?> request; AbstractXmlInspector inspector; public WsdlRequestHeadersModel(AbstractHttpRequest<?> abstractHttpRequest) { super(false, abstractHttpRequest, AbstractHttpRequestInterface.REQUEST_HEADERS_PROPERTY); this.request = abstractHttpRequest; this.request.addPropertyChangeListener(this); } public StringToStringsMap getHeaders() { return getModelItem().getRequestHeaders(); } public void setHeaders(StringToStringsMap headers) { getModelItem().setRequestHeaders(headers); } public void setInspector(AbstractXmlInspector inspector) { this.inspector = inspector; } @Override public void release() { super.release(); request.removePropertyChangeListener(this); } public void propertyChange(PropertyChangeEvent evt) { if (evt.getPropertyName().equals(AbstractHttpRequest.ENDPOINT_PROPERTY)) { if (inspector != null && request.getEndpoint() != null) { inspector.setEnabled(!request.getEndpoint().startsWith(JMSEndpoint.JMS_ENDPOINT_PREFIX)); } } super.propertyChange(evt); } } private class AMFRequestHeadersModel extends AbstractHeadersModel<AMFRequestTestStep> { public AMFRequestHeadersModel(AMFRequestTestStep testStep) { super(false, testStep, AMFRequest.AMF_REQUEST); } public StringToStringsMap getHeaders() { return getModelItem().getHttpHeaders(); } public void setHeaders(StringToStringsMap headers) { getModelItem().setHttpHeaders(headers); } @Override public void release() { super.release(); } } private class AMFResponseHeadersModel extends AbstractHeadersModel<AMFRequestTestStep> { AMFRequestTestStep testStep; public AMFResponseHeadersModel(AMFRequestTestStep testStep) { super(true, testStep, AMFResponse.AMF_RESPONSE_HEADERS); this.testStep = testStep; this.testStep.getAMFRequest().addPropertyChangeListener(AMFRequest.AMF_RESPONSE_PROPERTY, this); } public StringToStringsMap getHeaders() { if (testStep.getAMFRequest().getResponse() != null) { AMFResponse response = testStep.getAMFRequest().getResponse(); return response.getResponseHeaders(); } else { return new StringToStringsMap(); } } @Override public void release() { super.release(); testStep.getAMFRequest().removePropertyChangeListener(AMFRequest.AMF_RESPONSE_PROPERTY, this); } } private class MockResponseHeadersModel extends AbstractHeadersModel<MockResponse> { public MockResponseHeadersModel(MockResponse mockResponse) { super(false, mockResponse, WsdlMockResponse.HEADERS_PROPERTY); } public StringToStringsMap getHeaders() { return getModelItem().getResponseHeaders(); } public void setHeaders(StringToStringsMap headers) { getModelItem().setResponseHeaders(headers); } } private class WsdlRequestResponseHeadersModel extends AbstractHeadersModel<AbstractHttpRequest<?>> { AbstractHttpRequest<?> request; AbstractXmlInspector inspector; public WsdlRequestResponseHeadersModel(AbstractHttpRequest<?> request) { super(true, request, WsdlRequest.RESPONSE_PROPERTY); this.request = request; this.request.addPropertyChangeListener(this); } public StringToStringsMap getHeaders() { AbstractHttpRequestInterface<?> request = getModelItem(); return request.getResponse() == null ? new StringToStringsMap() : request.getResponse().getResponseHeaders(); } public void setInspector(AbstractXmlInspector inspector) { this.inspector = inspector; } 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); } @Override public void release() { super.release(); request.removePropertyChangeListener(this); } } private class WsdlMockResponseRequestHeadersModel extends AbstractHeadersModel<WsdlMockResponse> { public WsdlMockResponseRequestHeadersModel(WsdlMockResponse request) { super(true, request, WsdlMockResponse.MOCKRESULT_PROPERTY); } public StringToStringsMap getHeaders() { WsdlMockResponse request = getModelItem(); return request.getMockResult() == null ? new StringToStringsMap() : request.getMockResult().getMockRequest() .getRequestHeaders(); } } }