View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2007 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.iface;
14  
15  import java.awt.event.ActionEvent;
16  
17  import com.eviware.soapui.impl.wsdl.WsdlInterface;
18  import com.eviware.soapui.impl.wsdl.WsdlOperation;
19  import com.eviware.soapui.impl.wsdl.WsdlProject;
20  import com.eviware.soapui.impl.wsdl.mock.WsdlMockOperation;
21  import com.eviware.soapui.impl.wsdl.mock.WsdlMockService;
22  import com.eviware.soapui.model.support.ModelSupport;
23  import com.eviware.soapui.support.UISupport;
24  import com.eviware.x.form.XFormDialog;
25  import com.eviware.x.form.support.ADialogBuilder;
26  import com.eviware.x.form.support.AField;
27  import com.eviware.x.form.support.AForm;
28  import com.eviware.x.form.support.AField.AFieldType;
29  
30  public class GenerateMockServiceAction extends AbstractSwingAction<WsdlInterface>
31  {
32  	private static final String CREATE_MOCKSUITE_OPTION = "<create>";
33  //	private XFormDialog dialog;
34  
35  	public GenerateMockServiceAction( WsdlInterface iface )
36  	{
37  		super( "Generate MockService", "Generates a MockService containing all Operations in this Interface", iface );
38  	}
39  
40  	public void actionPerformed( ActionEvent e, WsdlInterface iface )
41  	{
42        generateMockService( iface );
43  	}
44  
45  	public WsdlMockService generateMockService( WsdlInterface iface )
46  	{
47  		XFormDialog dialog = ADialogBuilder.buildDialog( Form.class );
48  		
49  		WsdlProject project = ( WsdlProject ) iface.getProject();
50  		String[] mockServices = ModelSupport.getNames( project.getMockServices(), new String[] {CREATE_MOCKSUITE_OPTION});
51  		dialog.setOptions( Form.MOCKSERVICE, mockServices );
52  		
53  		dialog.setValue( Form.PATH, "/mock" + iface.getName() );
54  		dialog.setValue( Form.PORT, "8088" );
55  		
56  		if( dialog.show() )
57  		{
58  			String mockServiceName = dialog.getValue( Form.MOCKSERVICE );
59  			WsdlMockService mockService = ( WsdlMockService ) project.getMockServiceByName( mockServiceName );
60  			
61  			if( mockService == null || mockServiceName.equals( CREATE_MOCKSUITE_OPTION ))
62  			{
63  				mockServiceName = UISupport.prompt( "Specify name of MockService to create", getName(), iface.getName() + " MockService" );
64  				if( mockServiceName == null )
65  					return null;
66  				
67  				mockService = ( WsdlMockService ) project.addNewMockService( mockServiceName );
68  			}
69  			
70  			mockService.setPath( dialog.getValue( Form.PATH ) );
71  			try
72  			{
73  				mockService.setPort( Integer.parseInt( dialog.getValue( Form.PORT )) );
74  			}
75  			catch( NumberFormatException e1 )
76  			{
77  			}
78  			
79  			for( int i = 0; i < iface.getOperationCount(); i++ )
80  			{
81  				WsdlOperation operation = ( WsdlOperation ) iface.getOperationAt( i );
82  				WsdlMockOperation mockOperation = ( WsdlMockOperation ) mockService.addNewMockOperation( operation );
83  				mockOperation.addNewMockResponse( "Response 1", true );
84  			}
85  			
86  			UISupport.showDesktopPanel( mockService );
87  			return mockService;
88  		}
89  		
90  		return null;
91  	}
92  	
93  	@AForm( name="Generate MockService", 
94  				description = "Set options for generated MockOperations for this Interface")
95  	private interface Form 
96  	{
97  		@AField(name = "MockService", description = "The MockService to create or use", type = AFieldType.ENUMERATION )
98  		public final static String MOCKSERVICE = "MockService";
99  		
100 		@AField(name = "Path", description = "The URL path to mount on", type = AFieldType.STRING )
101 		public final static String PATH = "Path";
102 
103 		@AField(name = "Port", description = "The endpoint port to listen on", type = AFieldType.STRING )
104 		public final static String PORT = "Port";
105 	}
106 }