View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2007 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  			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 }