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.actions.operation;
14  
15  import com.eviware.soapui.SoapUI;
16  import com.eviware.soapui.impl.wsdl.WsdlOperation;
17  import com.eviware.soapui.impl.wsdl.WsdlProject;
18  import com.eviware.soapui.impl.wsdl.mock.WsdlMockOperation;
19  import com.eviware.soapui.impl.wsdl.mock.WsdlMockResponse;
20  import com.eviware.soapui.impl.wsdl.mock.WsdlMockService;
21  import com.eviware.soapui.model.support.ModelSupport;
22  import com.eviware.soapui.support.UISupport;
23  import com.eviware.soapui.support.action.support.AbstractSoapUIAction;
24  
25  /***
26   * Creates a WsdlMockOperation for the specified WsdlOperation
27   * 
28   * @author ole.matzura
29   */
30  
31  public class AddOperationToMockServiceAction extends AbstractSoapUIAction<WsdlOperation>
32  {
33  	private static final String CREATE_MOCKSUITE_OPTION = "Create new..";
34  	public static final String SOAPUI_ACTION_ID = "AddOperationToMockServiceAction";
35  
36  	public AddOperationToMockServiceAction()
37  	{
38  		super( "Add to MockService", "Add this operation to a MockService" );
39  	}
40  
41  	public void perform( WsdlOperation operation, Object param )
42  	{
43  		String title = getName();
44  
45  		WsdlMockService mockService = null;
46  		WsdlProject project = operation.getInterface().getProject();
47  
48  		while( mockService == null )
49  		{
50  			if( project.getMockServiceCount() > 0 )
51  			{
52  				String[] mockServices = ModelSupport.getNames( project.getMockServiceList(),
53  						new String[] { CREATE_MOCKSUITE_OPTION } );
54  
55  				// prompt
56  				String option = UISupport.prompt( "Select MockService for MockOperation", title, mockServices );
57  				if( option == null )
58  					return;
59  
60  				mockService = project.getMockServiceByName( option );
61  			}
62  
63  			// create new mocksuite?
64  			if( mockService == null )
65  			{
66  				String mockServiceName = UISupport.prompt( "Enter name of new MockService", title, "MockService "
67  						+ ( project.getMockServiceCount() + 1 ) );
68  				if( mockServiceName == null || mockServiceName.trim().length() == 0 )
69  					return;
70  
71  				mockService = project.addNewMockService( mockServiceName );
72  			}
73  
74  			if( mockService.hasMockOperation( operation ) )
75  			{
76  				UISupport.showErrorMessage( "MockService [" + mockService.getName() + "] already has a MockOperation for ["
77  						+ operation.getName() + "], please select another MockService" );
78  				mockService = null;
79  			}
80  		}
81  
82  		// add mockoperation
83  		addOperationToMockService( operation, mockService );
84  	}
85  
86  	public boolean addOperationToMockService( WsdlOperation operation, WsdlMockService mockService )
87  	{
88  		if( mockService.hasMockOperation( operation ) )
89  		{
90  			UISupport.showErrorMessage( "MockService [" + mockService.getName() + "] already has a MockOperation for ["
91  					+ operation.getName() + "]" );
92  			return false;
93  		}
94  
95  		WsdlMockOperation mockOperation = mockService.addNewMockOperation( operation );
96  		WsdlMockResponse mockResponse = mockOperation.addNewMockResponse( "Response 1", false );
97  
98  		if( operation.isBidirectional() )
99  			mockResponse.setResponseContent( operation.createResponse( true ) );
100 
101 		if( UISupport.confirm( "Open MockResponse editor?", getName() ) )
102 		{
103 			SoapUI.getDesktop().showDesktopPanel( mockResponse );
104 		}
105 
106 		return true;
107 	}
108 }