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 getTreeModel().mapModelItems( interfaceNodes );
68 getTreeModel().mapModelItems( testSuiteNodes );
69 getTreeModel().mapModelItems( mockServiceNodes );
70
71 initOrdering( testSuiteNodes, UISettings.ORDER_TESTSUITES );
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 ) return index + propMod;
118
119 index = testSuiteNodes.indexOf( child );
120 if( index >= 0 ) return index + interfaceNodes.size() + propMod;
121
122 index = mockServiceNodes.indexOf( child );
123 if( index >= 0 ) 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 throw new RuntimeException( "Removing unkown interface" );
168 }
169
170 public void testSuiteAdded(TestSuite testSuite)
171 {
172 TestSuiteTreeNode testSuiteNode = new TestSuiteTreeNode( testSuite, getTreeModel() );
173 testSuiteNodes.add( testSuiteNode );
174 reorder(false);
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 throw new RuntimeException( "Removing unkown testSuite" );
187 }
188
189 public void mockServiceAdded( MockService mockService )
190 {
191 MockServiceTreeNode mockServiceNode = new MockServiceTreeNode( mockService, getTreeModel() );
192 mockServiceNodes.add( mockServiceNode );
193 getTreeModel().notifyNodeInserted( mockServiceNode );
194 }
195
196 public void mockServiceRemoved( MockService mockService )
197 {
198 SoapUITreeNode treeNode = getTreeModel().getTreeNode( mockService );
199 if( mockServiceNodes.contains( treeNode ))
200 {
201 getTreeModel().notifyNodeRemoved( treeNode );
202 mockServiceNodes.remove( treeNode);
203 }
204 else throw new RuntimeException( "Removing unkown mockService" );
205 }
206
207 public void interfaceUpdated( Interface iface )
208 {
209 }
210 }
211
212 }