View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2009 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.Operation;
19  import com.eviware.soapui.model.iface.Request;
20  import com.eviware.soapui.model.tree.AbstractModelItemTreeNode;
21  import com.eviware.soapui.model.tree.SoapUITreeModel;
22  import com.eviware.soapui.model.tree.SoapUITreeNode;
23  import com.eviware.soapui.settings.UISettings;
24  
25  /***
26   * SoapUITreeNode for Operation implementations
27   * 
28   * @author Ole.Matzura
29   */
30  
31  public class OperationTreeNode extends AbstractModelItemTreeNode<Operation>
32  {
33  	private List<RequestTreeNode> requestNodes = new ArrayList<RequestTreeNode>();
34  	private ReorderPropertyChangeListener propertyChangeListener = new ReorderPropertyChangeListener();
35  
36  	public OperationTreeNode( Operation operation, SoapUITreeModel treeModel )
37  	{
38  		super( operation, operation.getInterface(), treeModel );
39  
40  		for( int c = 0; c < operation.getRequestCount(); c++ )
41  		{
42  			Request request = operation.getRequestAt( c );
43  			request.addPropertyChangeListener( Request.NAME_PROPERTY, propertyChangeListener );
44  			requestNodes.add( new RequestTreeNode( request, getTreeModel() ) );
45  		}
46  
47  		initOrdering( requestNodes, UISettings.ORDER_REQUESTS );
48  		treeModel.mapModelItems( requestNodes );
49  	}
50  
51  	public void release()
52  	{
53  		super.release();
54  
55  		for( RequestTreeNode treeNode : requestNodes )
56  		{
57  			treeNode.getModelItem().removePropertyChangeListener( Request.NAME_PROPERTY, propertyChangeListener );
58  			treeNode.release();
59  		}
60  	}
61  
62  	public Operation getOperation()
63  	{
64  		return ( Operation )getModelItem();
65  	}
66  
67  	public void requestAdded( Request request )
68  	{
69  		RequestTreeNode requestTreeNode = new RequestTreeNode( request, getTreeModel() );
70  		requestNodes.add( requestTreeNode );
71  		reorder( false );
72  		request.addPropertyChangeListener( Request.NAME_PROPERTY, propertyChangeListener );
73  		getTreeModel().notifyNodeInserted( requestTreeNode );
74  	}
75  
76  	public void requestRemoved( Request request )
77  	{
78  		SoapUITreeNode requestTreeNode = getTreeModel().getTreeNode( request );
79  		if( requestNodes.contains( requestTreeNode ) )
80  		{
81  			getTreeModel().notifyNodeRemoved( requestTreeNode );
82  			requestNodes.remove( requestTreeNode );
83  			request.removePropertyChangeListener( propertyChangeListener );
84  		}
85  		else
86  			throw new RuntimeException( "Removing unknown request" );
87  	}
88  }