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