View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2008 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.impl.wsdl.panels.request;
14  
15  import com.eviware.soapui.impl.support.components.ModelItemXmlEditor;
16  import com.eviware.soapui.impl.support.components.RequestXmlDocument;
17  import com.eviware.soapui.impl.support.components.ResponseXmlDocument;
18  import com.eviware.soapui.impl.support.panels.AbstractHttpRequestDesktopPanel;
19  import com.eviware.soapui.impl.wsdl.WsdlRequest;
20  import com.eviware.soapui.impl.wsdl.WsdlSubmitContext;
21  import com.eviware.soapui.impl.wsdl.actions.request.AddRequestToMockServiceAction;
22  import com.eviware.soapui.impl.wsdl.actions.request.CloneRequestAction;
23  import com.eviware.soapui.impl.wsdl.actions.request.CreateEmptyRequestAction;
24  import com.eviware.soapui.impl.wsdl.actions.request.RecreateRequestAction;
25  import com.eviware.soapui.impl.wsdl.panels.request.actions.WSIValidateRequestAction;
26  import com.eviware.soapui.model.ModelItem;
27  import com.eviware.soapui.model.iface.Request.SubmitException;
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.action.swing.SwingActionDelegate;
32  import com.eviware.soapui.support.components.JXToolBar;
33  import com.eviware.soapui.support.editor.views.xml.source.XmlSourceEditorView;
34  import com.eviware.soapui.support.editor.xml.XmlDocument;
35  import com.eviware.soapui.support.editor.xml.support.DefaultXmlDocument;
36  import com.eviware.soapui.support.xml.JXEditTextArea;
37  
38  import javax.swing.*;
39  
40  /***
41   * Abstract DesktopPanel for WsdlRequests
42   * 
43   * @author Ole.Matzura
44   */
45  
46  public abstract class AbstractWsdlRequestDesktopPanel<T extends ModelItem, T2 extends WsdlRequest> extends
47  		AbstractHttpRequestDesktopPanel<T, T2> implements SubmitListener
48  {
49  	private JButton recreateButton;
50  	private JButton cloneButton;
51  	private JButton createEmptyButton;
52  	private JButton addToMockServiceButton;
53  	private AbstractAction wsiValidateAction;
54  
55  	public AbstractWsdlRequestDesktopPanel(T modelItem, T2 request)
56  	{
57  		super(modelItem, request);
58  	}
59  
60  	@Override
61  	protected void init(T2 request)
62  	{
63  		recreateButton = createActionButton(new RecreateRequestAction(request), true);
64  		addToMockServiceButton = createActionButton(SwingActionDelegate.createDelegate(
65  				AddRequestToMockServiceAction.SOAPUI_ACTION_ID, request, null, "/addToMockService.gif"), true);
66  
67  		cloneButton = createActionButton(SwingActionDelegate.createDelegate(CloneRequestAction.SOAPUI_ACTION_ID, request,
68  				null, "/clone_request.gif"), true);
69  
70  		createEmptyButton = createActionButton(new CreateEmptyRequestAction(request), true);
71  
72  		wsiValidateAction = SwingActionDelegate.createDelegate(new WSIValidateRequestAction(), request, "alt W");
73  		wsiValidateAction.setEnabled(request.getResponse() != null);
74  		
75  		super.init(request);
76  	}
77  
78  	protected ModelItemXmlEditor<?,?> buildResponseEditor()
79  	{
80  		return new WsdlResponseMessageEditor(new ResponseXmlDocument(getRequest()));
81  	}
82  
83  	protected ModelItemXmlEditor<?,?> buildRequestEditor()
84  	{
85  		return new WsdlRequestMessageEditor(new RequestXmlDocument(getRequest()));
86  	}
87  
88  	public static class OneWayResponseMessageEditor extends ModelItemXmlEditor<ModelItem, DefaultXmlDocument>
89  	{
90  		public OneWayResponseMessageEditor(ModelItem modelItem)
91  		{
92  			super(new DefaultXmlDocument(), modelItem);
93  		}
94  	}
95  
96  	protected void insertButtons(JXToolBar toolbar)
97  	{
98  		toolbar.add(addToMockServiceButton);
99  		toolbar.add(recreateButton);
100 		toolbar.add(createEmptyButton);
101 		toolbar.add(cloneButton);
102 	}
103 
104 	public void setEnabled(boolean enabled)
105 	{
106 		super.setEnabled(enabled);
107 
108 		recreateButton.setEnabled(enabled);
109 		createEmptyButton.setEnabled(enabled);
110 		cloneButton.setEnabled(enabled);
111 	}
112 
113 	public class WsdlRequestMessageEditor extends AbstractHttpRequestDesktopPanel<T,T2>.AbstractHttpRequestMessageEditor<XmlDocument>
114 	{
115 		public WsdlRequestMessageEditor(XmlDocument document)
116 		{
117 			super(document);
118 
119 			XmlSourceEditorView editor = getSourceEditor();
120 			JXEditTextArea inputArea = editor.getInputArea();
121 			inputArea.getInputHandler().addKeyBinding("F5", recreateButton.getAction());
122 		}
123 	}
124 
125 	public class WsdlResponseMessageEditor extends AbstractHttpRequestDesktopPanel<T,T2>.AbstractHttpResponseMessageEditor<XmlDocument>
126 	{
127 		public WsdlResponseMessageEditor(XmlDocument document)
128 		{
129 			super(document);
130 
131 			XmlSourceEditorView editor = getSourceEditor();
132 
133 			JPopupMenu inputPopup = editor.getEditorPopup();
134 			inputPopup.insert(new JSeparator(), 2);
135 			inputPopup.insert(wsiValidateAction, 3);
136 		}
137 	}
138 
139 	protected Submit doSubmit() throws SubmitException
140 	{
141 		return getRequest().submit(new WsdlSubmitContext(getModelItem()), true);
142 	}
143 
144 	public boolean beforeSubmit(Submit submit, SubmitContext context)
145 	{
146 		boolean result = super.beforeSubmit(submit, context);
147 		wsiValidateAction.setEnabled(!result);
148 		return result;
149 	}
150 
151 	public void afterSubmit(Submit submit, SubmitContext context)
152 	{
153 		super.afterSubmit(submit, context);
154       if( !isHasClosed() )
155 		   wsiValidateAction.setEnabled(submit.getResponse() != null);
156 	}
157 }