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 import java.util.ArrayList;
19
20 import javax.swing.BorderFactory;
21 import javax.swing.DefaultComboBoxModel;
22 import javax.swing.DefaultListCellRenderer;
23 import javax.swing.JButton;
24 import javax.swing.JComboBox;
25 import javax.swing.JDialog;
26 import javax.swing.JList;
27
28 import com.eviware.soapui.impl.wsdl.teststeps.PropertyTransfer;
29 import com.eviware.soapui.impl.wsdl.teststeps.PropertyTransfersTestStep;
30 import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestStep;
31 import com.eviware.soapui.model.TestModelItem;
32 import com.eviware.soapui.model.TestPropertyHolder;
33 import com.eviware.soapui.model.propertyexpansion.PropertyExpansion;
34 import com.eviware.soapui.model.propertyexpansion.PropertyExpansionUtils;
35 import com.eviware.soapui.support.UISupport;
36 import com.eviware.soapui.support.resolver.ResolveContext.Resolver;
37 import com.jgoodies.forms.builder.PanelBuilder;
38 import com.jgoodies.forms.layout.CellConstraints;
39 import com.jgoodies.forms.layout.FormLayout;
40
41 public class ChooseAnotherPropertyTargetResolver implements Resolver
42 {
43
44 private boolean resolved;
45 private PropertyTransfer badTransfer = null;
46 private PropertyTransfersTestStep parent = null;
47 private ArrayList<Object> sources = new ArrayList<Object>();
48 private ArrayList<String[]> properties = new ArrayList<String[]>();
49
50 public ChooseAnotherPropertyTargetResolver(PropertyTransfer propertyTransfer, PropertyTransfersTestStep parent)
51 {
52 this.badTransfer = propertyTransfer;
53 this.parent = parent;
54
55 sources.add(PropertyExpansionUtils.getGlobalProperties());
56 properties.add(PropertyExpansionUtils.getGlobalProperties().getPropertyNames());
57 sources.add(parent.getTestCase().getTestSuite().getProject());
58 properties.add(parent.getTestCase().getTestSuite().getProject().getPropertyNames());
59 sources.add(parent.getTestCase().getTestSuite());
60 properties.add(parent.getTestCase().getTestSuite().getPropertyNames());
61
62 sources.add(parent.getTestCase());
63 properties.add(parent.getTestCase().getPropertyNames());
64
65 for (int c = 0; c < parent.getTestCase().getTestStepCount(); c++)
66 {
67 WsdlTestStep testStep = parent.getTestCase().getTestStepAt(c);
68 if (testStep == parent)
69 continue;
70
71 sources.add(testStep);
72 properties.add(testStep.getPropertyNames());
73 }
74
75 }
76
77 public String getDescription()
78 {
79 return "Choose new target property";
80 }
81
82 @Override
83 public String toString()
84 {
85 return getDescription();
86 }
87
88 public String getResolvedPath()
89 {
90 return null;
91 }
92
93 public boolean isResolved()
94 {
95 return resolved;
96 }
97
98 public boolean resolve()
99 {
100 PropertyChangeDialog propertyChangeDialog = new PropertyChangeDialog("Choose another property");
101 propertyChangeDialog.showAndChoose();
102
103 return resolved;
104 }
105
106 @SuppressWarnings("serial")
107 private class PropertyChangeDialog extends JDialog
108 {
109
110 private JComboBox sourceStepCombo;
111 private JComboBox propertiesCombo;
112 private JButton okBtn = new JButton(" Ok ");
113 private JButton cancelBtn = new JButton(" Cancel ");
114
115 public PropertyChangeDialog(String title)
116 {
117 super(UISupport.getMainFrame(), title, true);
118 init();
119 }
120
121 private void init()
122 {
123 FormLayout layout = new FormLayout("min,right:pref, 4dlu, 40dlu, 5dlu, 40dlu, min ",
124 "min, pref, 4dlu, pref, 4dlu, pref, min");
125 CellConstraints cc = new CellConstraints();
126 PanelBuilder panel = new PanelBuilder(layout);
127 panel.addLabel("Source:", cc.xy(2, 2));
128 DefaultComboBoxModel sourceStepComboModel = new DefaultComboBoxModel();
129 sourceStepCombo = new JComboBox(sourceStepComboModel);
130 sourceStepCombo.setRenderer(new StepComboRenderer());
131 for (Object element : sources)
132 sourceStepComboModel.addElement(element);
133
134 sourceStepCombo.setSelectedIndex(0);
135 panel.add(sourceStepCombo, cc.xyw(4, 2, 3));
136
137 int index = sourceStepCombo.getSelectedIndex();
138
139 propertiesCombo = new JComboBox(properties.get(index));
140 panel.addLabel("Property:", cc.xy(2, 4));
141 panel.add(propertiesCombo, cc.xyw(4, 4, 3));
142
143 panel.add(okBtn, cc.xy(4, 6));
144 panel.add(cancelBtn, cc.xy(6, 6));
145
146 sourceStepCombo.addActionListener(new ActionListener()
147 {
148
149 public void actionPerformed(ActionEvent e)
150 {
151 int index = sourceStepCombo.getSelectedIndex();
152 propertiesCombo.removeAllItems();
153 if (properties.get(index).length > 0)
154 {
155 propertiesCombo.setEnabled(true);
156 for (String str : properties.get(index))
157 propertiesCombo.addItem(str);
158 }
159 else
160 {
161 propertiesCombo.setEnabled(false);
162 }
163
164 }
165
166 });
167
168 okBtn.addActionListener(new ActionListener()
169 {
170
171 public void actionPerformed(ActionEvent e)
172 {
173
174 String name;
175 TestPropertyHolder sourceStep = (TestPropertyHolder) sourceStepCombo.getSelectedItem();
176 if (sourceStep == PropertyExpansionUtils.getGlobalProperties())
177 name = PropertyExpansion.GLOBAL_REFERENCE;
178 else if (sourceStep == parent.getTestCase().getTestSuite().getProject())
179 name = PropertyExpansion.PROJECT_REFERENCE;
180 else if (sourceStep == parent.getTestCase().getTestSuite())
181 name = PropertyExpansion.TESTSUITE_REFERENCE;
182 else if (sourceStep == parent.getTestCase())
183 name = PropertyExpansion.TESTCASE_REFERENCE;
184 else
185 name = sourceStep.getModelItem().getName();
186
187 badTransfer.setTargetStepName(name);
188
189 badTransfer.setTargetPropertyName((String) propertiesCombo.getSelectedItem());
190
191 resolved = true;
192
193 setVisible(false);
194 }
195
196 });
197
198 cancelBtn.addActionListener(new ActionListener()
199 {
200
201 public void actionPerformed(ActionEvent e)
202 {
203 resolved = false;
204
205 setVisible(false);
206 }
207
208 });
209
210 setLocationRelativeTo(UISupport.getParentFrame(this));
211 panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
212 this.add(panel.getPanel());
213 }
214
215 public void showAndChoose()
216 {
217 this.pack();
218 this.setVisible(true);
219 }
220 }
221
222 @SuppressWarnings("serial")
223 private class StepComboRenderer extends DefaultListCellRenderer
224 {
225 @SuppressWarnings("finally")
226 @Override
227 public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
228 boolean cellHasFocus)
229 {
230 Component result = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
231
232 try
233 {
234 if (value instanceof TestModelItem)
235 {
236 TestModelItem item = (TestModelItem) value;
237 setIcon(item.getIcon());
238 setText(item.getName());
239 }
240 else if (value == PropertyExpansionUtils.getGlobalProperties())
241 {
242 setText("Global");
243 }
244
245 }
246 catch (Exception e)
247 {
248 setText("Removed element");
249 } finally {
250 return result;
251 }
252 }
253 }
254 }