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.project.ProjectListener;
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
39 public ProjectTreeNode( Project project, WorkspaceTreeNode workspaceNode )
40 {
41 super( project, workspaceNode.getWorkspace(), workspaceNode.getTreeModel() );
42
43 internalProjectListener = new InternalProjectListener();
44 project.addProjectListener( internalProjectListener);
45
46 for( int c = 0; c < project.getInterfaceCount(); c++ )
47 {
48 interfaceNodes.add( new InterfaceTreeNode( project.getInterfaceAt( c ), getTreeModel() ));
49 }
50
51 for( int c = 0; c < project.getTestSuiteCount(); c++ )
52 {
53 testSuiteNodes.add( new TestSuiteTreeNode( project.getTestSuiteAt( c ), getTreeModel() ));
54 }
55
56 for( int c = 0; c < project.getMockServiceCount(); c++ )
57 {
58 mockServiceNodes.add( new MockServiceTreeNode( project.getMockServiceAt( c ), getTreeModel() ));
59 }
60
61 getTreeModel().mapModelItems( interfaceNodes );
62 getTreeModel().mapModelItems( testSuiteNodes );
63 getTreeModel().mapModelItems( mockServiceNodes );
64 }
65
66 public void release()
67 {
68 super.release();
69
70 getProject().removeProjectListener( internalProjectListener );
71
72 for( InterfaceTreeNode treeNode : interfaceNodes )
73 treeNode.release();
74
75 for( TestSuiteTreeNode treeNode : testSuiteNodes )
76 treeNode.release();
77
78 for( MockServiceTreeNode treeNode : mockServiceNodes )
79 treeNode.release();
80 }
81
82 public int getChildCount()
83 {
84 return interfaceNodes.size() + testSuiteNodes.size() + mockServiceNodes.size();
85 }
86
87 public int getIndexOfChild(Object child)
88 {
89 int index = interfaceNodes.indexOf( child );
90 if( index >= 0 ) return index;
91
92 index = testSuiteNodes.indexOf( child );
93 if( index >= 0 ) return index + interfaceNodes.size();
94
95 index = mockServiceNodes.indexOf( child );
96 if( index >= 0 ) return index + interfaceNodes.size() + testSuiteNodes.size();
97
98 return -1;
99 }
100
101 public SoapUITreeNode getChildNode(int index)
102 {
103 if( index < interfaceNodes.size() )
104 return interfaceNodes.get( index );
105 else if( index < testSuiteNodes.size()+interfaceNodes.size() )
106 return testSuiteNodes.get( index-interfaceNodes.size() );
107 else
108 return mockServiceNodes.get( index- interfaceNodes.size() - testSuiteNodes.size() );
109 }
110
111 public Project getProject()
112 {
113 return (Project) getModelItem();
114 }
115
116 private class InternalProjectListener implements ProjectListener
117 {
118 public void interfaceAdded(Interface iface)
119 {
120 InterfaceTreeNode interfaceTreeNode = new InterfaceTreeNode( iface, getTreeModel() );
121 interfaceNodes.add( interfaceTreeNode);
122 getTreeModel().notifyNodeInserted( interfaceTreeNode );
123 }
124
125 public void interfaceRemoved(Interface iface)
126 {
127 SoapUITreeNode treeNode = getTreeModel().getTreeNode( iface );
128 if( interfaceNodes.contains( treeNode ))
129 {
130 getTreeModel().notifyNodeRemoved( treeNode );
131 interfaceNodes.remove( treeNode);
132 }
133 else throw new RuntimeException( "Removing unkown interface" );
134 }
135
136 public void testSuiteAdded(TestSuite testSuite)
137 {
138 TestSuiteTreeNode testSuiteNode = new TestSuiteTreeNode( testSuite, getTreeModel() );
139 testSuiteNodes.add( testSuiteNode );
140 getTreeModel().notifyNodeInserted( testSuiteNode );
141 }
142
143 public void testSuiteRemoved(TestSuite testSuite)
144 {
145 SoapUITreeNode treeNode = getTreeModel().getTreeNode( testSuite );
146 if( testSuiteNodes.contains( treeNode ))
147 {
148 getTreeModel().notifyNodeRemoved( treeNode );
149 testSuiteNodes.remove( treeNode);
150 }
151 else throw new RuntimeException( "Removing unkown testSuite" );
152 }
153
154 public void mockServiceAdded( MockService mockService )
155 {
156 MockServiceTreeNode mockServiceNode = new MockServiceTreeNode( mockService, getTreeModel() );
157 mockServiceNodes.add( mockServiceNode );
158 getTreeModel().notifyNodeInserted( mockServiceNode );
159 }
160
161 public void mockServiceRemoved( MockService mockService )
162 {
163 SoapUITreeNode treeNode = getTreeModel().getTreeNode( mockService );
164 if( mockServiceNodes.contains( treeNode ))
165 {
166 getTreeModel().notifyNodeRemoved( treeNode );
167 mockServiceNodes.remove( treeNode);
168 }
169 else throw new RuntimeException( "Removing unkown mockService" );
170 }
171 }
172
173 }