View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2010 eviware.com 
3    *
4    *  soapUI is free software; you can redistribute it and/or modify it under the 
5    *  terms of version 2.1 of the GNU Lesser General Public License as published by 
6    *  the Free Software Foundation.
7    *
8    *  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 
9    *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
10   *  See the GNU Lesser General Public License for more details at gnu.org.
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 }