/* * 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.impl.wsdl.panels.request; import com.eviware.soapui.analytics.Analytics; import com.eviware.soapui.analytics.SoapUIActions; import com.eviware.soapui.impl.support.components.ModelItemXmlEditor; import com.eviware.soapui.impl.support.components.RequestXmlDocument; import com.eviware.soapui.impl.support.components.ResponseXmlDocument; import com.eviware.soapui.impl.support.panels.AbstractHttpRequestDesktopPanel; import com.eviware.soapui.impl.wsdl.WsdlRequest; import com.eviware.soapui.impl.wsdl.WsdlSubmitContext; import com.eviware.soapui.impl.wsdl.actions.request.AddRequestToMockServiceAction; import com.eviware.soapui.impl.wsdl.actions.request.CloneRequestAction; import com.eviware.soapui.impl.wsdl.actions.request.CreateEmptyRequestAction; import com.eviware.soapui.impl.wsdl.actions.request.RecreateRequestAction; import com.eviware.soapui.impl.wsdl.panels.request.actions.WSIValidateRequestAction; import com.eviware.soapui.model.ModelItem; import com.eviware.soapui.model.iface.Request.SubmitException; 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.action.swing.SwingActionDelegate; import com.eviware.soapui.support.components.JXToolBar; import com.eviware.soapui.support.editor.views.xml.source.XmlSourceEditorView; import com.eviware.soapui.support.editor.xml.XmlDocument; import com.eviware.soapui.support.editor.xml.support.DefaultXmlDocument; import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; import javax.swing.AbstractAction; import javax.swing.JButton; import javax.swing.JPopupMenu; import javax.swing.JSeparator; import javax.swing.KeyStroke; /** * Abstract DesktopPanel for WsdlRequests * * @author Ole.Matzura */ public abstract class AbstractWsdlRequestDesktopPanel<T extends ModelItem, T2 extends WsdlRequest> extends AbstractHttpRequestDesktopPanel<T, T2> implements SubmitListener { private JButton recreateButton; private JButton cloneButton; private JButton createEmptyButton; private JButton addToMockServiceButton; private AbstractAction wsiValidateAction; public AbstractWsdlRequestDesktopPanel(T modelItem, T2 request) { super(modelItem, request); } @Override protected void init(T2 request) { recreateButton = createActionButton(new RecreateRequestAction(request), true); addToMockServiceButton = createActionButton(SwingActionDelegate.createDelegate( AddRequestToMockServiceAction.SOAPUI_ACTION_ID, request, null, "/addToMockService.gif"), true); cloneButton = createActionButton(SwingActionDelegate.createDelegate(CloneRequestAction.SOAPUI_ACTION_ID, request, null, "/clone.png"), true); createEmptyButton = createActionButton(new CreateEmptyRequestAction(request), true); wsiValidateAction = SwingActionDelegate.createDelegate(new WSIValidateRequestAction(), request, "alt W"); wsiValidateAction.setEnabled(request.getResponse() != null); super.init(request); } protected ModelItemXmlEditor<?, ?> buildResponseEditor() { return new WsdlResponseMessageEditor(new ResponseXmlDocument(getRequest())); } protected ModelItemXmlEditor<?, ?> buildRequestEditor() { return new WsdlRequestMessageEditor(new RequestXmlDocument(getRequest())); } public static class OneWayResponseMessageEditor extends ModelItemXmlEditor<ModelItem, DefaultXmlDocument> { public OneWayResponseMessageEditor(ModelItem modelItem) { super(new DefaultXmlDocument(), modelItem); } } protected void insertButtons(JXToolBar toolbar) { toolbar.add(addToMockServiceButton); toolbar.add(recreateButton); toolbar.add(createEmptyButton); toolbar.add(cloneButton); } public void setEnabled(boolean enabled) { super.setEnabled(enabled); recreateButton.setEnabled(enabled); createEmptyButton.setEnabled(enabled); cloneButton.setEnabled(enabled); } public class WsdlRequestMessageEditor extends AbstractHttpRequestDesktopPanel<T, T2>.AbstractHttpRequestMessageEditor<XmlDocument> { public WsdlRequestMessageEditor(XmlDocument document) { super(document); XmlSourceEditorView<?> editor = getSourceEditor(); RSyntaxTextArea inputArea = editor.getInputArea(); inputArea.getInputMap().put(KeyStroke.getKeyStroke("F5"), recreateButton.getAction()); } } public class WsdlResponseMessageEditor extends AbstractHttpRequestDesktopPanel<T, T2>.AbstractHttpResponseMessageEditor<XmlDocument> { public WsdlResponseMessageEditor(XmlDocument document) { super(document); XmlSourceEditorView<?> editor = getSourceEditor(); JPopupMenu inputPopup = editor.getEditorPopup(); inputPopup.insert(new JSeparator(), 2); inputPopup.insert(wsiValidateAction, 3); inputPopup.insert(new JSeparator(), 4); } } protected Submit doSubmit() throws SubmitException { Analytics.trackAction(SoapUIActions.RUN_REQUEST_FROM_REQUEST_EDITOR.getActionName(), "Type", "SOAP"); return getRequest().submit(new WsdlSubmitContext(getModelItem()), true); } public boolean beforeSubmit(Submit submit, SubmitContext context) { boolean result = super.beforeSubmit(submit, context); wsiValidateAction.setEnabled(!result); return result; } public void afterSubmit(Submit submit, SubmitContext context) { super.afterSubmit(submit, context); if (!isHasClosed()) { wsiValidateAction.setEnabled(submit.getResponse() != null); } } }