1
2
3
4
5
6
7
8
9
10
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 }