View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2008 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  		getTreeModel().mapModelItems( interfaceNodes );
68  		getTreeModel().mapModelItems( testSuiteNodes );
69  		getTreeModel().mapModelItems( mockServiceNodes );
70  		
71  		initOrdering( testSuiteNodes, UISettings.ORDER_TESTSUITES );
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 ) return index + propMod;
118    	
119    	index = testSuiteNodes.indexOf( child );
120    	if( index >= 0 ) return index + interfaceNodes.size() + propMod;
121    	
122    	index = mockServiceNodes.indexOf( child );
123    	if( index >= 0 ) return index + interfaceNodes.size() + testSuiteNodes.size() + propMod;
124    	
125    	return -1;
126    }
127 
128    public SoapUITreeNode getChildNode(int index)
129    {
130    	if( propertiesTreeNode == null )
131 			return null;
132    	
133    	int propMod = getTreeModel().isShowProperties() ? 1 : 0;
134    	
135    	if( propMod == 1 && index == 0 )
136    		return propertiesTreeNode;
137    	else if( index < interfaceNodes.size()+propMod )
138          return interfaceNodes.get( index-propMod );
139       else if( index < testSuiteNodes.size()+interfaceNodes.size()+propMod )
140          return testSuiteNodes.get( index-interfaceNodes.size()-propMod );
141       else 
142          return mockServiceNodes.get( index- interfaceNodes.size() - testSuiteNodes.size() -propMod );
143    }
144 
145    public Project getProject()
146    {
147       return (Project) getModelItem();
148    }
149    
150 	private class InternalProjectListener extends ProjectListenerAdapter
151    {
152       public void interfaceAdded(Interface iface)
153       {
154       	InterfaceTreeNode interfaceTreeNode = new InterfaceTreeNode( iface, getTreeModel() );
155 			interfaceNodes.add( interfaceTreeNode);
156          getTreeModel().notifyNodeInserted( interfaceTreeNode );
157       }
158          
159       public void interfaceRemoved(Interface iface)
160       {
161       	SoapUITreeNode treeNode = getTreeModel().getTreeNode( iface );
162       	if( interfaceNodes.contains( treeNode ))
163       	{
164       		getTreeModel().notifyNodeRemoved( treeNode );
165       		interfaceNodes.remove( treeNode);
166       	}
167       	else throw new RuntimeException( "Removing unkown interface" );
168       }
169       
170       public void testSuiteAdded(TestSuite testSuite)
171       {
172       	TestSuiteTreeNode testSuiteNode = new TestSuiteTreeNode( testSuite, getTreeModel() );
173       	testSuiteNodes.add( testSuiteNode );
174       	reorder(false);
175       	getTreeModel().notifyNodeInserted( testSuiteNode );
176       }
177 
178       public void testSuiteRemoved(TestSuite testSuite)
179       {
180       	SoapUITreeNode treeNode = getTreeModel().getTreeNode( testSuite );
181       	if( testSuiteNodes.contains( treeNode ))
182       	{
183       		getTreeModel().notifyNodeRemoved( treeNode );
184       		testSuiteNodes.remove( treeNode);
185       	}
186       	else throw new RuntimeException( "Removing unkown testSuite" );
187       }
188 
189 		public void mockServiceAdded( MockService mockService )
190 		{
191 			MockServiceTreeNode mockServiceNode = new MockServiceTreeNode( mockService, getTreeModel() );
192       	mockServiceNodes.add( mockServiceNode );
193       	getTreeModel().notifyNodeInserted( mockServiceNode );
194 		}
195 
196 		public void mockServiceRemoved( MockService mockService )
197 		{
198 			SoapUITreeNode treeNode = getTreeModel().getTreeNode( mockService );
199       	if( mockServiceNodes.contains( treeNode ))
200       	{
201       		getTreeModel().notifyNodeRemoved( treeNode );
202       		mockServiceNodes.remove( treeNode);
203       	}
204       	else throw new RuntimeException( "Removing unkown mockService" );
205 		}
206 
207 		public void interfaceUpdated( Interface iface )
208 		{
209 		}
210    }
211    
212 }