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.iface.Interface;
19 import com.eviware.soapui.model.mock.MockService;
20 import com.eviware.soapui.model.project.Project;
21 import com.eviware.soapui.model.support.ProjectListenerAdapter;
22 import com.eviware.soapui.model.testsuite.TestSuite;
23 import com.eviware.soapui.model.tree.AbstractModelItemTreeNode;
24 import com.eviware.soapui.model.tree.SoapUITreeNode;
25
26 /***
27 * SoapUITreeNode for Project implementations
28 *
29 * @author Ole.Matzura
30 */
31
32 public class ProjectTreeNode extends AbstractModelItemTreeNode<Project>
33 {
34 private InternalProjectListener internalProjectListener;
35 private List<InterfaceTreeNode> interfaceNodes = new ArrayList<InterfaceTreeNode>();
36 private List<TestSuiteTreeNode> testSuiteNodes = new ArrayList<TestSuiteTreeNode>();
37 private List<MockServiceTreeNode> mockServiceNodes = new ArrayList<MockServiceTreeNode>();
38 private PropertiesTreeNode<?> propertiesTreeNode;
39
40 public ProjectTreeNode( Project project, WorkspaceTreeNode workspaceNode )
41 {
42 super( project, workspaceNode.getWorkspace(), workspaceNode.getTreeModel() );
43
44 if( !project.isOpen() )
45 return;
46
47 internalProjectListener = new InternalProjectListener();
48 project.addProjectListener( internalProjectListener );
49
50 for( int c = 0; c < project.getInterfaceCount(); c++ )
51 {
52 Interface iface = project.getInterfaceAt( c );
53 interfaceNodes.add( new InterfaceTreeNode( iface, getTreeModel() ) );
54 }
55
56 for( int c = 0; c < project.getTestSuiteCount(); c++ )
57 {
58 testSuiteNodes.add( new TestSuiteTreeNode( project.getTestSuiteAt( c ), getTreeModel() ) );
59 }
60
61 for( int c = 0; c < project.getMockServiceCount(); c++ )
62 {
63 mockServiceNodes.add( new MockServiceTreeNode( project.getMockServiceAt( c ), getTreeModel() ) );
64 }
65
66 getTreeModel().mapModelItems( interfaceNodes );
67 getTreeModel().mapModelItems( testSuiteNodes );
68 getTreeModel().mapModelItems( mockServiceNodes );
69
70 propertiesTreeNode = PropertiesTreeNode.createDefaultPropertiesNode( project, getTreeModel() );
71 getTreeModel().mapModelItem( propertiesTreeNode );
72 }
73
74 public void release()
75 {
76 super.release();
77
78 getProject().removeProjectListener( internalProjectListener );
79
80 for( InterfaceTreeNode treeNode : interfaceNodes )
81 treeNode.release();
82
83 for( TestSuiteTreeNode treeNode : testSuiteNodes )
84 treeNode.release();
85
86 for( MockServiceTreeNode treeNode : mockServiceNodes )
87 treeNode.release();
88
89 if( propertiesTreeNode != null )
90 propertiesTreeNode.release();
91 }
92
93 public int getChildCount()
94 {
95 if( propertiesTreeNode == null )
96 return 0;
97
98 int propMod = getTreeModel().isShowProperties() ? 1 : 0;
99
100 return interfaceNodes.size() + testSuiteNodes.size() + mockServiceNodes.size() + propMod;
101 }
102
103 public int getIndexOfChild( Object child )
104 {
105 if( propertiesTreeNode == null )
106 return -1;
107
108 if( child == propertiesTreeNode )
109 return 0;
110
111 int propMod = getTreeModel().isShowProperties() ? 1 : 0;
112
113 int index = interfaceNodes.indexOf( child );
114 if( index >= 0 )
115 return index + propMod;
116
117 index = testSuiteNodes.indexOf( child );
118 if( index >= 0 )
119 return index + interfaceNodes.size() + propMod;
120
121 index = mockServiceNodes.indexOf( child );
122 if( index >= 0 )
123 return index + interfaceNodes.size() + testSuiteNodes.size() + propMod;
124
125 return -1;
126 }
127
128 public SoapUITreeNode getChildNode( int index )
129 {
130 if( propertiesTreeNode == null )
131 return null;
132
133 int propMod = getTreeModel().isShowProperties() ? 1 : 0;
134
135 if( propMod == 1 && index == 0 )
136 return propertiesTreeNode;
137 else if( index < interfaceNodes.size() + propMod )
138 return interfaceNodes.get( index - propMod );
139 else if( index < testSuiteNodes.size() + interfaceNodes.size() + propMod )
140 return testSuiteNodes.get( index - interfaceNodes.size() - propMod );
141 else
142 return mockServiceNodes.get( index - interfaceNodes.size() - testSuiteNodes.size() - propMod );
143 }
144
145 public Project getProject()
146 {
147 return ( Project )getModelItem();
148 }
149
150 private class InternalProjectListener extends ProjectListenerAdapter
151 {
152 public void interfaceAdded( Interface iface )
153 {
154 InterfaceTreeNode interfaceTreeNode = new InterfaceTreeNode( iface, getTreeModel() );
155 interfaceNodes.add( interfaceTreeNode );
156 getTreeModel().notifyNodeInserted( interfaceTreeNode );
157 }
158
159 public void interfaceRemoved( Interface iface )
160 {
161 SoapUITreeNode treeNode = getTreeModel().getTreeNode( iface );
162 if( interfaceNodes.contains( treeNode ) )
163 {
164 getTreeModel().notifyNodeRemoved( treeNode );
165 interfaceNodes.remove( treeNode );
166 }
167 else
168 throw new RuntimeException( "Removing unkown interface" );
169 }
170
171 public void testSuiteAdded( TestSuite testSuite )
172 {
173 TestSuiteTreeNode testSuiteNode = new TestSuiteTreeNode( testSuite, getTreeModel() );
174 testSuiteNodes.add( testSuite.getProject().getIndexOfTestSuite( testSuite ), testSuiteNode );
175 getTreeModel().notifyNodeInserted( testSuiteNode );
176 }
177
178 public void testSuiteRemoved( TestSuite testSuite )
179 {
180 SoapUITreeNode treeNode = getTreeModel().getTreeNode( testSuite );
181 if( testSuiteNodes.contains( treeNode ) )
182 {
183 getTreeModel().notifyNodeRemoved( treeNode );
184 testSuiteNodes.remove( treeNode );
185 }
186 else
187 throw new RuntimeException( "Removing unkown testSuite" );
188 }
189
190 @Override
191 public void testSuiteMoved( TestSuite testSuite, int index, int offset )
192 {
193 testSuiteRemoved( testSuite );
194 testSuiteAdded( testSuite );
195 }
196
197 public void mockServiceAdded( MockService mockService )
198 {
199 MockServiceTreeNode mockServiceNode = new MockServiceTreeNode( mockService, getTreeModel() );
200 mockServiceNodes.add( mockServiceNode );
201 getTreeModel().notifyNodeInserted( mockServiceNode );
202 }
203
204 public void mockServiceRemoved( MockService mockService )
205 {
206 SoapUITreeNode treeNode = getTreeModel().getTreeNode( mockService );
207 if( mockServiceNodes.contains( treeNode ) )
208 {
209 getTreeModel().notifyNodeRemoved( treeNode );
210 mockServiceNodes.remove( treeNode );
211 }
212 else
213 throw new RuntimeException( "Removing unkown mockService" );
214 }
215 }
216
217 }