View Javadoc

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