1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.model.tree.nodes;
14
15 import java.util.ArrayList;
16 import java.util.List;
17
18 import com.eviware.soapui.model.testsuite.LoadTest;
19 import com.eviware.soapui.model.testsuite.TestCase;
20 import com.eviware.soapui.model.testsuite.TestStep;
21 import com.eviware.soapui.model.testsuite.TestSuite;
22 import com.eviware.soapui.model.testsuite.TestSuiteListener;
23 import com.eviware.soapui.model.tree.AbstractModelItemTreeNode;
24 import com.eviware.soapui.model.tree.SoapUITreeModel;
25 import com.eviware.soapui.model.tree.SoapUITreeNode;
26
27 /***
28 * SoapUITreeNode for TestSuite implementations
29 *
30 * @author Ole.Matzura
31 */
32
33 public class TestSuiteTreeNode extends AbstractModelItemTreeNode<TestSuite>
34 {
35 private InternalTestSuiteListener internalTestSuiteListener = new InternalTestSuiteListener();;
36 private ReorderPropertyChangeListener propertyChangeListener = new ReorderPropertyChangeListener();
37 private List<TestCaseTreeNode> testCaseNodes = new ArrayList<TestCaseTreeNode>();
38 private PropertiesTreeNode propertiesTreeNode;
39
40 public TestSuiteTreeNode(TestSuite testSuite, SoapUITreeModel treeModel )
41 {
42 super( testSuite, testSuite.getProject(), treeModel );
43
44 testSuite.addTestSuiteListener( internalTestSuiteListener );
45
46 for( int c = 0; c < testSuite.getTestCaseCount(); c++ )
47 {
48 TestCase testCase = testSuite.getTestCaseAt( c );
49 testCase.addPropertyChangeListener( TestCase.NAME_PROPERTY, propertyChangeListener );
50 testCaseNodes.add( new TestCaseTreeNode( testCase, getTreeModel() ));
51 }
52
53 getTreeModel().mapModelItems( testCaseNodes );
54
55 propertiesTreeNode = PropertiesTreeNode.createDefaultPropertiesNode( testSuite, getTreeModel() );
56 getTreeModel().mapModelItem( propertiesTreeNode );
57 }
58
59 public void release()
60 {
61 super.release();
62
63 getTestSuite().removeTestSuiteListener( internalTestSuiteListener );
64
65 for( TestCaseTreeNode treeNode : testCaseNodes )
66 {
67 treeNode.getModelItem().removePropertyChangeListener( propertyChangeListener );
68 treeNode.release();
69 }
70
71 propertiesTreeNode.release();
72 }
73
74 @Override
75 public int getChildCount()
76 {
77 int propMod = getTreeModel().isShowProperties() ? 1 : 0;
78 return testCaseNodes.size() + propMod;
79 }
80
81 @Override
82 public SoapUITreeNode getChildNode( int index )
83 {
84 int propMod = getTreeModel().isShowProperties() ? 1 : 0;
85 return index == 0 && propMod == 1 ? propertiesTreeNode : testCaseNodes.get( index-propMod );
86 }
87
88 @Override
89 public int getIndexOfChild( Object child )
90 {
91 int propMod = getTreeModel().isShowProperties() ? 1 : 0;
92 if( propMod == 1 && child == propertiesTreeNode )
93 return 0;
94
95 int ix = testCaseNodes.indexOf( child );
96 return ix == -1 ? ix : ix+propMod;
97 }
98
99 public TestSuite getTestSuite()
100 {
101 return (TestSuite) getModelItem();
102 }
103
104 private class InternalTestSuiteListener implements TestSuiteListener
105 {
106 public void testCaseAdded(TestCase testCase)
107 {
108 TestCaseTreeNode testCaseTreeNode = new TestCaseTreeNode( testCase, getTreeModel() );
109 testCaseNodes.add( testCase.getTestSuite().getIndexOfTestCase(testCase), testCaseTreeNode );
110
111 testCase.addPropertyChangeListener( TestCase.NAME_PROPERTY, propertyChangeListener );
112 getTreeModel().notifyNodeInserted( testCaseTreeNode );
113 }
114
115 public void testCaseRemoved(TestCase testCase)
116 {
117 SoapUITreeNode treeNode = getTreeModel().getTreeNode( testCase );
118 if( testCaseNodes.contains( treeNode ))
119 {
120 getTreeModel().notifyNodeRemoved( treeNode );
121 testCaseNodes.remove( treeNode );
122 testCase.removePropertyChangeListener( propertyChangeListener );
123 }
124 else throw new RuntimeException( "Removing unknown TestCase" );
125 }
126
127 public void testStepAdded(TestStep testStep, int index)
128 {
129 TestCaseTreeNode testCaseTreeNode = (TestCaseTreeNode) getTreeModel().getTreeNode( testStep.getTestCase() );
130 testCaseTreeNode.testStepInserted( testStep, index );
131 }
132
133 public void testStepRemoved(TestStep testStep, int index)
134 {
135 TestCaseTreeNode testCaseTreeNode = (TestCaseTreeNode) getTreeModel().getTreeNode( testStep.getTestCase() );
136 testCaseTreeNode.testStepRemoved( testStep, index );
137 }
138
139 public void loadTestAdded(LoadTest loadTest)
140 {
141 TestCaseTreeNode testCaseTreeNode = (TestCaseTreeNode) getTreeModel().getTreeNode( loadTest.getTestCase() );
142 testCaseTreeNode.loadTestInserted( loadTest );
143 }
144
145 public void loadTestRemoved(LoadTest loadTest)
146 {
147 TestCaseTreeNode testCaseTreeNode = (TestCaseTreeNode) getTreeModel().getTreeNode( loadTest.getTestCase() );
148 testCaseTreeNode.loadTestRemoved( loadTest );
149 }
150
151 public void testStepMoved(TestStep testStep, int fromIndex, int offset)
152 {
153 TestCaseTreeNode testCaseTreeNode = (TestCaseTreeNode) getTreeModel().getTreeNode( testStep.getTestCase() );
154 testCaseTreeNode.testStepMoved( testStep, fromIndex, offset );
155 }
156
157 public void testCaseMoved( TestCase testCase, int index, int offset )
158 {
159 testCaseRemoved( testCase );
160 testCaseAdded( testCase );
161 }
162 }
163 }