View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2010 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.support.resolver;
14  
15  import java.awt.Component;
16  import java.awt.event.ActionEvent;
17  import java.awt.event.ActionListener;
18  
19  import javax.swing.DefaultComboBoxModel;
20  import javax.swing.JComboBox;
21  
22  import com.eviware.soapui.impl.rest.RestMethod;
23  import com.eviware.soapui.impl.rest.RestResource;
24  import com.eviware.soapui.impl.rest.RestService;
25  import com.eviware.soapui.impl.wsdl.WsdlProject;
26  import com.eviware.soapui.impl.wsdl.actions.project.SimpleDialog;
27  import com.eviware.soapui.impl.wsdl.teststeps.RestTestRequestStep;
28  import com.eviware.soapui.model.iface.Interface;
29  import com.eviware.soapui.model.iface.Operation;
30  import com.eviware.soapui.support.components.SimpleForm;
31  import com.eviware.soapui.support.resolver.ResolveContext.Resolver;
32  import com.eviware.soapui.support.swing.ModelItemListCellRenderer;
33  
34  public abstract class ChangeRestMethodResolver implements Resolver
35  {
36  	private boolean resolved = false;
37  	private WsdlProject project;
38  	private RestMethod selectedMethod;
39  
40  	public ChangeRestMethodResolver( RestTestRequestStep testStep )
41  	{
42  		this.project = testStep.getTestCase().getTestSuite().getProject();
43  	}
44  
45  	public String getResolvedPath()
46  	{
47  		return "";
48  	}
49  
50  	public boolean isResolved()
51  	{
52  		return resolved;
53  	}
54  
55  	public boolean resolve()
56  	{
57  		PropertyChangeDialog pDialog = new PropertyChangeDialog( "Resolve REST Method" );
58  		pDialog.setVisible( true );
59  		resolved = update();
60  		return resolved;
61  	}
62  
63  	public abstract boolean update();
64  
65  	protected abstract Interface[] getInterfaces( WsdlProject project );
66  
67  	public String getDescription()
68  	{
69  		return "Resolve: Select another REST Method";
70  	}
71  
72  	@Override
73  	public String toString()
74  	{
75  		return getDescription();
76  	}
77  
78  	@SuppressWarnings( "serial" )
79  	private class PropertyChangeDialog extends SimpleDialog
80  	{
81  		private JComboBox serviceCombo;
82  		private JComboBox resourceCombo;
83  		private JComboBox methodCombo;
84  
85  		public PropertyChangeDialog( String title )
86  		{
87  			super( title, getDescription(), null );
88  		}
89  
90  		protected Component buildContent()
91  		{
92  			SimpleForm form = new SimpleForm();
93  
94  			form.addSpace( 5 );
95  			Interface[] ifaces = getInterfaces( project );
96  			DefaultComboBoxModel serviceComboModel = new DefaultComboBoxModel();
97  			serviceCombo = form.appendComboBox( "REST Services", serviceComboModel, "Target Service" );
98  			serviceCombo.setRenderer( new ModelItemListCellRenderer() );
99  			for( Interface element : ifaces )
100 			{
101 				if( element instanceof RestService )
102 					serviceComboModel.addElement( element );
103 			}
104 
105 			resourceCombo = form.appendComboBox( "REST Resources", ( ( RestService )serviceCombo.getSelectedItem() )
106 					.getOperationList().toArray(), "Target Resource" );
107 			resourceCombo.setRenderer( new ModelItemListCellRenderer() );
108 
109 			methodCombo = form.appendComboBox( "REST Methods", ( ( RestResource )resourceCombo.getSelectedItem() )
110 					.getRestMethodList().toArray(), "Target Method" );
111 			methodCombo.setRenderer( new ModelItemListCellRenderer() );
112 
113 			serviceCombo.addActionListener( new ActionListener()
114 			{
115 				public void actionPerformed( ActionEvent e )
116 				{
117 					Interface iface = project.getInterfaceByName( ( ( Interface )serviceCombo.getSelectedItem() ).getName() );
118 					resourceCombo.removeAllItems();
119 					if( iface != null )
120 					{
121 						resourceCombo.setEnabled( true );
122 						for( Operation op : iface.getOperationList() )
123 							resourceCombo.addItem( op );
124 					}
125 					else
126 					{
127 						resourceCombo.setEnabled( false );
128 					}
129 				}
130 			} );
131 
132 			resourceCombo.addActionListener( new ActionListener()
133 			{
134 				public void actionPerformed( ActionEvent e )
135 				{
136 					RestResource resource = ( RestResource )resourceCombo.getSelectedItem();
137 					methodCombo.removeAllItems();
138 					if( resource != null )
139 					{
140 						methodCombo.setEnabled( true );
141 						for( RestMethod method : resource.getRestMethodList() )
142 							methodCombo.addItem( method );
143 					}
144 					else
145 					{
146 						methodCombo.setEnabled( false );
147 					}
148 				}
149 			} );
150 
151 			form.addSpace( 5 );
152 			return form.getPanel();
153 		}
154 
155 		protected boolean handleOk()
156 		{
157 			selectedMethod = ( RestMethod )methodCombo.getSelectedItem();
158 			return true;
159 		}
160 	}
161 
162 	public RestMethod getSelectedRestMethod()
163 	{
164 		return selectedMethod;
165 	}
166 
167 }