Lines 18-23
Link Here
|
18 |
|
18 |
|
19 |
package org.apache.jmeter.gui.tree; |
19 |
package org.apache.jmeter.gui.tree; |
20 |
|
20 |
|
|
|
21 |
import java.util.Collection; |
21 |
import java.util.Enumeration; |
22 |
import java.util.Enumeration; |
22 |
import java.util.LinkedList; |
23 |
import java.util.LinkedList; |
23 |
import java.util.List; |
24 |
import java.util.List; |
Lines 25-35
Link Here
|
25 |
import javax.swing.tree.DefaultTreeModel; |
26 |
import javax.swing.tree.DefaultTreeModel; |
26 |
|
27 |
|
27 |
import org.apache.jmeter.config.gui.AbstractConfigGui; |
28 |
import org.apache.jmeter.config.gui.AbstractConfigGui; |
|
|
29 |
import org.apache.jmeter.control.TestFragmentController; |
30 |
import org.apache.jmeter.control.gui.TestFragmentControllerGui; |
28 |
import org.apache.jmeter.control.gui.TestPlanGui; |
31 |
import org.apache.jmeter.control.gui.TestPlanGui; |
29 |
import org.apache.jmeter.control.gui.WorkBenchGui; |
|
|
30 |
import org.apache.jmeter.exceptions.IllegalUserActionException; |
32 |
import org.apache.jmeter.exceptions.IllegalUserActionException; |
31 |
import org.apache.jmeter.gui.GuiPackage; |
33 |
import org.apache.jmeter.gui.GuiPackage; |
32 |
import org.apache.jmeter.gui.JMeterGUIComponent; |
34 |
import org.apache.jmeter.gui.JMeterGUIComponent; |
|
|
35 |
import org.apache.jmeter.gui.util.MenuFactory; |
33 |
import org.apache.jmeter.testelement.TestElement; |
36 |
import org.apache.jmeter.testelement.TestElement; |
34 |
import org.apache.jmeter.testelement.TestPlan; |
37 |
import org.apache.jmeter.testelement.TestPlan; |
35 |
import org.apache.jmeter.testelement.WorkBench; |
38 |
import org.apache.jmeter.testelement.WorkBench; |
Lines 40-52
Link Here
|
40 |
|
43 |
|
41 |
private static final long serialVersionUID = 240L; |
44 |
private static final long serialVersionUID = 240L; |
42 |
|
45 |
|
43 |
public JMeterTreeModel(TestElement tp, TestElement wb) { |
46 |
public JMeterTreeModel(TestElement tp) { |
44 |
super(new JMeterTreeNode(wb, null)); |
47 |
super(new JMeterTreeNode(tp, null)); |
45 |
initTree(tp,wb); |
48 |
initTree(tp); |
46 |
} |
49 |
} |
47 |
|
50 |
|
48 |
public JMeterTreeModel() { |
51 |
public JMeterTreeModel() { |
49 |
this(new TestPlanGui().createTestElement(),new WorkBenchGui().createTestElement()); |
52 |
this(new TestPlanGui().createTestElement()); |
50 |
} |
53 |
} |
51 |
|
54 |
|
52 |
/** |
55 |
/** |
Lines 57-63
Link Here
|
57 |
*/ |
60 |
*/ |
58 |
@Deprecated |
61 |
@Deprecated |
59 |
public JMeterTreeModel(Object o) { |
62 |
public JMeterTreeModel(Object o) { |
60 |
this(new TestPlan(),new WorkBench()); |
63 |
this(new TestPlan()); |
61 |
} |
64 |
} |
62 |
|
65 |
|
63 |
/** |
66 |
/** |
Lines 90-102
Link Here
|
90 |
* <code>current</code> |
93 |
* <code>current</code> |
91 |
* @param current |
94 |
* @param current |
92 |
* The node in which the <code>subTree</code> is to be inserted. |
95 |
* The node in which the <code>subTree</code> is to be inserted. |
93 |
* Will be overridden, when an instance of {@link TestPlan} or |
96 |
* Will be overridden, when an instance of {@link TestPlan} |
94 |
* {@link WorkBench} is found in the subtree. |
|
|
95 |
* @return newly created sub tree now found at <code>current</code> |
97 |
* @return newly created sub tree now found at <code>current</code> |
96 |
* @throws IllegalUserActionException |
98 |
* @throws IllegalUserActionException |
97 |
* when <code>current</code> is not an instance of |
99 |
* when <code>current</code> is not an instance of |
98 |
* {@link AbstractConfigGui} and no instance of {@link TestPlan} |
100 |
* {@link AbstractConfigGui} and no instance of {@link TestPlan} |
99 |
* or {@link WorkBench} could be found in the |
|
|
100 |
* <code>subTree</code> |
101 |
* <code>subTree</code> |
101 |
*/ |
102 |
*/ |
102 |
public HashTree addSubTree(HashTree subTree, JMeterTreeNode current) throws IllegalUserActionException { |
103 |
public HashTree addSubTree(HashTree subTree, JMeterTreeNode current) throws IllegalUserActionException { |
Lines 112-122
Link Here
|
112 |
userObject.setSerialized(tp.isSerialized()); |
113 |
userObject.setSerialized(tp.isSerialized()); |
113 |
addSubTree(subTree.getTree(item), current); |
114 |
addSubTree(subTree.getTree(item), current); |
114 |
} else if (item instanceof WorkBench) { |
115 |
} else if (item instanceof WorkBench) { |
115 |
current = (JMeterTreeNode) ((JMeterTreeNode) getRoot()).getChildAt(1); |
116 |
//Move item from WorkBench to TestPlan |
116 |
final TestElement testElement = (TestElement) current.getUserObject(); |
117 |
HashTree workbenchTree = subTree.getTree(item); |
117 |
testElement.addTestElement(item); |
118 |
if (workbenchTree.size() > 0) { |
118 |
testElement.setName(item.getName()); |
119 |
moveWorkBenchToTestPlan(current, workbenchTree); |
119 |
addSubTree(subTree.getTree(item), current); |
120 |
} |
120 |
} else { |
121 |
} else { |
121 |
addSubTree(subTree.getTree(item), addComponent(item, current)); |
122 |
addSubTree(subTree.getTree(item), addComponent(item, current)); |
122 |
} |
123 |
} |
Lines 164-170
Link Here
|
164 |
} |
165 |
} |
165 |
|
166 |
|
166 |
public void removeNodeFromParent(JMeterTreeNode node) { |
167 |
public void removeNodeFromParent(JMeterTreeNode node) { |
167 |
if (!(node.getUserObject() instanceof TestPlan) && !(node.getUserObject() instanceof WorkBench)) { |
168 |
if (!(node.getUserObject() instanceof TestPlan)) { |
168 |
super.removeNodeFromParent(node); |
169 |
super.removeNodeFromParent(node); |
169 |
} |
170 |
} |
170 |
} |
171 |
} |
Lines 218-230
Link Here
|
218 |
return getCurrentSubTree((JMeterTreeNode) ((JMeterTreeNode) this.getRoot()).getChildAt(0)); |
219 |
return getCurrentSubTree((JMeterTreeNode) ((JMeterTreeNode) this.getRoot()).getChildAt(0)); |
219 |
} |
220 |
} |
220 |
|
221 |
|
221 |
/** |
|
|
222 |
* Get the {@link WorkBench} from the root of this tree |
223 |
* @return The {@link WorkBench} found at the root of this tree |
224 |
*/ |
225 |
public HashTree getWorkBench() { |
226 |
return getCurrentSubTree((JMeterTreeNode) ((JMeterTreeNode) this.getRoot()).getChildAt(1)); |
227 |
} |
228 |
|
222 |
|
229 |
/** |
223 |
/** |
230 |
* Clear the test plan, and use default node for test plan and workbench. |
224 |
* Clear the test plan, and use default node for test plan and workbench. |
Lines 252-274
Link Here
|
252 |
children = getChildCount(getRoot()); |
246 |
children = getChildCount(getRoot()); |
253 |
} |
247 |
} |
254 |
// Init the tree |
248 |
// Init the tree |
255 |
initTree(testPlan,new WorkBenchGui().createTestElement()); // Assumes this is only called from GUI mode |
249 |
initTree(testPlan); // Assumes this is only called from GUI mode |
256 |
} |
250 |
} |
257 |
|
251 |
|
258 |
/** |
252 |
/** |
259 |
* Initialize the model with nodes for testplan and workbench. |
253 |
* Initialize the model with nodes for testplan and workbench. |
260 |
* |
254 |
* |
261 |
* @param tp the element to use as testplan |
255 |
* @param tp the element to use as testplan |
262 |
* @param wb the element to use as workbench |
|
|
263 |
*/ |
256 |
*/ |
264 |
private void initTree(TestElement tp, TestElement wb) { |
257 |
private void initTree(TestElement tp) { |
265 |
// Insert the test plan node |
258 |
// Insert the test plan node |
266 |
insertNodeInto(new JMeterTreeNode(tp, this), (JMeterTreeNode) getRoot(), 0); |
259 |
insertNodeInto(new JMeterTreeNode(tp, this), (JMeterTreeNode) getRoot(), 0); |
267 |
// Insert the workbench node |
|
|
268 |
insertNodeInto(new JMeterTreeNode(wb, this), (JMeterTreeNode) getRoot(), 1); |
269 |
// Let others know that the tree content has changed. |
260 |
// Let others know that the tree content has changed. |
270 |
// This should not be necessary, but without it, nodes are not shown when the user |
261 |
// This should not be necessary, but without it, nodes are not shown when the user |
271 |
// uses the Close menu item |
262 |
// uses the Close menu item |
272 |
nodeStructureChanged((JMeterTreeNode)getRoot()); |
263 |
nodeStructureChanged((JMeterTreeNode)getRoot()); |
273 |
} |
264 |
} |
|
|
265 |
|
266 |
|
267 |
/** |
268 |
* Move all Non-Test Elements from WorkBench to TestPlan root. |
269 |
* Other Test Elements will be move to WorkBench Test Fragment in TestPlan |
270 |
* @param current - TestPlan root |
271 |
* @param workbenchTree - WorkBench hash tree |
272 |
*/ |
273 |
private void moveWorkBenchToTestPlan(JMeterTreeNode current, HashTree workbenchTree) throws IllegalUserActionException { |
274 |
Object[] workbenchTreeArray = workbenchTree.getArray(); |
275 |
for (Object node : workbenchTreeArray) { |
276 |
if (isNonTestElement(node)) { |
277 |
HashTree subtree = workbenchTree.getTree(node); |
278 |
workbenchTree.remove(node); |
279 |
HashTree tree = new HashTree(); |
280 |
tree.add(node); |
281 |
tree.add(node, subtree); |
282 |
((TestElement) node).setProperty(TestElement.ENABLED, false); |
283 |
addSubTree(tree, current); |
284 |
} |
285 |
} |
286 |
|
287 |
if (workbenchTree.size() > 0) { |
288 |
HashTree testFragmentTree = new HashTree(); |
289 |
TestFragmentController testFragmentController = new TestFragmentController(); |
290 |
testFragmentController.setProperty(TestElement.NAME, "WorkBench Test Fragment"); |
291 |
testFragmentController.setProperty(TestElement.GUI_CLASS, TestFragmentControllerGui.class.getName()); |
292 |
testFragmentController.setProperty(TestElement.ENABLED, false); |
293 |
testFragmentTree.add(testFragmentController); |
294 |
testFragmentTree.add(testFragmentController, workbenchTree); |
295 |
addSubTree(testFragmentTree, current); |
296 |
} |
297 |
} |
298 |
|
299 |
private boolean isNonTestElement(Object node) { |
300 |
JMeterTreeNode treeNode = new JMeterTreeNode((TestElement) node, null); |
301 |
Collection<String> categories = treeNode.getMenuCategories(); |
302 |
if (categories != null) { |
303 |
for (String category : categories) { |
304 |
if (MenuFactory.NON_TEST_ELEMENTS.equals(category)) { |
305 |
return true; |
306 |
} |
307 |
} |
308 |
} |
309 |
return false; |
310 |
} |
274 |
} |
311 |
} |