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.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 }