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 interfaceNodes.add( new InterfaceTreeNode( project.getInterfaceAt( c ), 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 initOrdering( testSuiteNodes, UISettings.ORDER_TESTSUITES );
71
72 propertiesTreeNode = PropertiesTreeNode.createDefaultPropertiesNode( project, getTreeModel() );
73 getTreeModel().mapModelItem( propertiesTreeNode );
74 }
75
76 public void release()
77 {
78 super.release();
79
80 getProject().removeProjectListener( internalProjectListener );
81
82 for( InterfaceTreeNode treeNode : interfaceNodes )
83 treeNode.release();
84
85 for( TestSuiteTreeNode treeNode : testSuiteNodes )
86 treeNode.release();
87
88 for( MockServiceTreeNode treeNode : mockServiceNodes )
89 treeNode.release();
90
91 if( propertiesTreeNode != null )
92 propertiesTreeNode.release();
93 }
94
95 public int getChildCount()
96 {
97 if( propertiesTreeNode == null )
98 return 0;
99
100 int propMod = getTreeModel().isShowProperties() ? 1 : 0;
101
102 return interfaceNodes.size() + testSuiteNodes.size() + mockServiceNodes.size() + propMod;
103 }
104
105 public int getIndexOfChild(Object child)
106 {
107 if( propertiesTreeNode == null )
108 return -1;
109
110 if( child == propertiesTreeNode )
111 return 0;
112
113 int propMod = getTreeModel().isShowProperties() ? 1 : 0;
114
115 int index = interfaceNodes.indexOf( child );
116 if( index >= 0 ) return index + propMod;
117
118 index = testSuiteNodes.indexOf( child );
119 if( index >= 0 ) return index + interfaceNodes.size() + propMod;
120
121 index = mockServiceNodes.indexOf( child );
122 if( index >= 0 ) return index + interfaceNodes.size() + testSuiteNodes.size() + propMod;
123
124 return -1;
125 }
126
127 public SoapUITreeNode getChildNode(int index)
128 {
129 if( propertiesTreeNode == null )
130 return null;
131
132 int propMod = getTreeModel().isShowProperties() ? 1 : 0;
133
134 if( propMod == 1 && index == 0 )
135 return propertiesTreeNode;
136 else if( index < interfaceNodes.size()+propMod )
137 return interfaceNodes.get( index-propMod );
138 else if( index < testSuiteNodes.size()+interfaceNodes.size()+propMod )
139 return testSuiteNodes.get( index-interfaceNodes.size()-propMod );
140 else
141 return mockServiceNodes.get( index- interfaceNodes.size() - testSuiteNodes.size() -propMod );
142 }
143
144 public Project getProject()
145 {
146 return (Project) getModelItem();
147 }
148
149 private class InternalProjectListener extends ProjectListenerAdapter
150 {
151 public void interfaceAdded(Interface iface)
152 {
153 InterfaceTreeNode interfaceTreeNode = new InterfaceTreeNode( iface, getTreeModel() );
154 interfaceNodes.add( interfaceTreeNode);
155 getTreeModel().notifyNodeInserted( interfaceTreeNode );
156 }
157
158 public void interfaceRemoved(Interface iface)
159 {
160 SoapUITreeNode treeNode = getTreeModel().getTreeNode( iface );
161 if( interfaceNodes.contains( treeNode ))
162 {
163 getTreeModel().notifyNodeRemoved( treeNode );
164 interfaceNodes.remove( treeNode);
165 }
166 else throw new RuntimeException( "Removing unkown interface" );
167 }
168
169 public void testSuiteAdded(TestSuite testSuite)
170 {
171 TestSuiteTreeNode testSuiteNode = new TestSuiteTreeNode( testSuite, getTreeModel() );
172 testSuiteNodes.add( testSuiteNode );
173 reorder(false);
174 getTreeModel().notifyNodeInserted( testSuiteNode );
175 }
176
177 public void testSuiteRemoved(TestSuite testSuite)
178 {
179 SoapUITreeNode treeNode = getTreeModel().getTreeNode( testSuite );
180 if( testSuiteNodes.contains( treeNode ))
181 {
182 getTreeModel().notifyNodeRemoved( treeNode );
183 testSuiteNodes.remove( treeNode);
184 }
185 else throw new RuntimeException( "Removing unkown testSuite" );
186 }
187
188 public void mockServiceAdded( MockService mockService )
189 {
190 MockServiceTreeNode mockServiceNode = new MockServiceTreeNode( mockService, getTreeModel() );
191 mockServiceNodes.add( mockServiceNode );
192 getTreeModel().notifyNodeInserted( mockServiceNode );
193 }
194
195 public void mockServiceRemoved( MockService mockService )
196 {
197 SoapUITreeNode treeNode = getTreeModel().getTreeNode( mockService );
198 if( mockServiceNodes.contains( treeNode ))
199 {
200 getTreeModel().notifyNodeRemoved( treeNode );
201 mockServiceNodes.remove( treeNode);
202 }
203 else throw new RuntimeException( "Removing unkown mockService" );
204 }
205
206 public void interfaceUpdated( Interface iface )
207 {
208 }
209 }
210
211 }