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