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