View Javadoc

1   /*
2    *  soapUI, copyright (C) 2006 eviware.com 
3    *
4    *  soapUI is free software; you can redistribute it and/or modify it under the 
5    *  terms of the GNU Lesser General Public License as published by the Free Software Foundation; 
6    *  either version 2.1 of the License, or (at your option) any later version.
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.mock.MockOperation;
19  import com.eviware.soapui.model.mock.MockResponse;
20  import com.eviware.soapui.model.mock.MockService;
21  import com.eviware.soapui.model.mock.MockServiceListener;
22  import com.eviware.soapui.model.tree.AbstractModelItemTreeNode;
23  import com.eviware.soapui.model.tree.SoapUITreeModel;
24  import com.eviware.soapui.model.tree.SoapUITreeNode;
25  import com.eviware.soapui.settings.UISettings;
26  
27  /***
28   * SoapUITreeNode for MockService implementations
29   * 
30   * @author Ole.Matzura
31   */
32  
33  public class MockServiceTreeNode extends AbstractModelItemTreeNode<MockService>
34  {
35  	private ReorderPropertyChangeListener propertyChangeListener = new ReorderPropertyChangeListener();
36  	private List<MockOperationTreeNode> mockOperationNodes = new ArrayList<MockOperationTreeNode>();
37  	private InternalMockServiceListener mockServiceListener;
38  
39  	public MockServiceTreeNode(MockService mockService, SoapUITreeModel treeModel )
40     {
41        super( mockService, mockService.getProject(), treeModel );
42        
43        mockServiceListener = new InternalMockServiceListener();
44  		mockService.addMockServiceListener( mockServiceListener );
45        
46  		for( int c = 0; c < mockService.getMockOperationCount(); c++ )
47  		{
48  			MockOperation mockOperation = mockService.getMockOperationAt( c );
49  			mockOperation.addPropertyChangeListener( MockService.NAME_PROPERTY, propertyChangeListener );
50  			mockOperationNodes.add( new MockOperationTreeNode( mockOperation, getTreeModel() ));
51  		}
52  		
53  		initOrdering( mockOperationNodes, UISettings.ORDER_MOCKOPERATION );
54  		
55  		getTreeModel().mapModelItems( mockOperationNodes );
56     }
57  	
58  	public void release()
59  	{
60  		super.release();
61  		
62  		getModelItem().removeMockServiceListener( mockServiceListener );
63  		
64  		for( MockOperationTreeNode treeNode : mockOperationNodes )
65  			treeNode.release();
66  	}
67  	
68     public MockService getMockService()
69     {
70        return (MockService) getModelItem();
71     }
72     
73     public int getChildCount()
74  	{
75  		return mockOperationNodes.size();
76  	}
77  
78  	public int getIndexOfChild(Object child)
79  	{
80  		return mockOperationNodes.indexOf( child );
81  	}
82  
83  	public SoapUITreeNode getChildNode(int index)
84  	{
85  		return mockOperationNodes.get( index );
86  	}
87  
88  	private final class InternalMockServiceListener implements MockServiceListener
89  	{
90  		public void mockOperationAdded( MockOperation mockOperation )
91  		{
92  			MockOperationTreeNode mockOperationTreeNode = new MockOperationTreeNode( mockOperation, getTreeModel() );
93  			mockOperationNodes.add( mockOperationTreeNode);
94  			getTreeModel().notifyNodeInserted( mockOperationTreeNode );
95  		}
96  
97  		public void mockOperationRemoved( MockOperation mockOperation )
98  		{
99  			SoapUITreeNode treeNode = getTreeModel().getTreeNode( mockOperation );
100 	   	if( mockOperationNodes.contains( treeNode ))
101 	   	{
102 	   		getTreeModel().notifyNodeRemoved( treeNode );
103 	   		mockOperationNodes.remove( treeNode );
104 	   	}
105 	   	else throw new RuntimeException( "Removing unkown mockOperation" );
106 		}
107 
108 		public void mockResponseAdded( MockResponse mockResponse )
109 		{
110 			 MockOperationTreeNode operationTreeNode = (MockOperationTreeNode) getTreeModel().getTreeNode( mockResponse.getMockOperation() );
111 	       if( operationTreeNode != null )
112 	       	 operationTreeNode.mockResponseAdded( mockResponse );		
113 	       else
114 	      	 throw new RuntimeException( "Adding mockResponse to unknwown MockOperation" );
115 	   }
116 
117 		public void mockResponseRemoved( MockResponse mockResponse )
118 		{
119 			MockOperationTreeNode operationTreeNode = (MockOperationTreeNode) getTreeModel().getTreeNode( mockResponse.getMockOperation() );
120 	       if( operationTreeNode != null )
121 	       	 operationTreeNode.mockResponseRemoved( mockResponse );		
122 	       else
123 	      	 throw new RuntimeException( "Removing mockResponse from unknown MockOperation" );
124 			
125 		}
126 	}
127 }