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.impl.rest.RestResource;
19  import com.eviware.soapui.model.iface.Interface;
20  import com.eviware.soapui.model.iface.InterfaceListener;
21  import com.eviware.soapui.model.iface.Operation;
22  import com.eviware.soapui.model.iface.Request;
23  import com.eviware.soapui.model.tree.AbstractModelItemTreeNode;
24  import com.eviware.soapui.model.tree.SoapUITreeModel;
25  import com.eviware.soapui.model.tree.SoapUITreeNode;
26  import com.eviware.soapui.model.tree.TreeNodeFactory;
27  
28  /***
29   * SoapUITreeNode for Interface implementations
30   * 
31   * @author Ole.Matzura
32   */
33  
34  public class InterfaceTreeNode extends AbstractModelItemTreeNode<Interface>
35  {
36  	private InternalInterfaceListener interfaceListener;
37  	private List<SoapUITreeNode> operationNodes = new ArrayList<SoapUITreeNode>();
38  
39  	public InterfaceTreeNode( Interface iface, SoapUITreeModel treeModel )
40  	{
41  		super( iface, iface.getProject(), treeModel );
42  
43  		interfaceListener = new InternalInterfaceListener();
44  		iface.addInterfaceListener( interfaceListener );
45  
46  		for( int c = 0; c < iface.getOperationCount(); c++ )
47  		{
48  			operationNodes.add( TreeNodeFactory.createTreeNode( iface.getOperationAt( c ), getTreeModel() ) );
49  		}
50  
51  		treeModel.mapModelItems( operationNodes );
52  	}
53  
54  	public void release()
55  	{
56  		super.release();
57  
58  		getInterface().removeInterfaceListener( interfaceListener );
59  
60  		for( SoapUITreeNode treeNode : operationNodes )
61  			treeNode.release();
62  	}
63  
64  	public Interface getInterface()
65  	{
66  		return ( Interface )getModelItem();
67  	}
68  
69  	public int getChildCount()
70  	{
71  		return operationNodes.size();
72  	}
73  
74  	public int getIndexOfChild( Object child )
75  	{
76  		return operationNodes.indexOf( child );
77  	}
78  
79  	public SoapUITreeNode getChildNode( int index )
80  	{
81  		return operationNodes.get( index );
82  	}
83  
84  	private class InternalInterfaceListener implements InterfaceListener
85  	{
86  		public void requestAdded( Request request )
87  		{
88  			SoapUITreeNode operationTreeNode = getTreeModel().getTreeNode( request.getOperation() );
89  			if( operationTreeNode != null && operationTreeNode instanceof OperationTreeNode )
90  				( ( OperationTreeNode )operationTreeNode ).requestAdded( request );
91  		}
92  
93  		public void requestRemoved( Request request )
94  		{
95  			SoapUITreeNode operationTreeNode = getTreeModel().getTreeNode( request.getOperation() );
96  			if( operationTreeNode != null && operationTreeNode instanceof OperationTreeNode )
97  				( ( OperationTreeNode )operationTreeNode ).requestRemoved( request );
98  		}
99  
100 		public void operationAdded( Operation operation )
101 		{
102 			if( operation instanceof RestResource )
103 			{
104 				RestResource restResource = ( RestResource )operation;
105 				if( restResource.getParentResource() != null )
106 				{
107 					RestResourceTreeNode treeNode = ( RestResourceTreeNode )getTreeModel().getTreeNode(
108 							restResource.getParentResource() );
109 					treeNode.addChildResource( restResource );
110 					return;
111 				}
112 			}
113 
114 			SoapUITreeNode operationTreeNode = TreeNodeFactory.createTreeNode( operation, getTreeModel() );
115 
116 			operationNodes.add( operationTreeNode );
117 			getTreeModel().notifyNodeInserted( operationTreeNode );
118 		}
119 
120 		public void operationRemoved( Operation operation )
121 		{
122 			SoapUITreeNode treeNode = getTreeModel().getTreeNode( operation );
123 			if( operationNodes.contains( treeNode ) )
124 			{
125 				getTreeModel().notifyNodeRemoved( treeNode );
126 				operationNodes.remove( treeNode );
127 			}
128 			else if( treeNode instanceof RestResourceTreeNode )
129 			{
130 				SoapUITreeNode parentNode = treeNode.getParentTreeNode();
131 				if( parentNode instanceof RestResourceTreeNode )
132 				{
133 					( ( RestResourceTreeNode )parentNode ).removeChildResource( ( RestResourceTreeNode )treeNode );
134 				}
135 			}
136 			else
137 				throw new RuntimeException( "Removing unknown operation" );
138 		}
139 
140 		public void operationUpdated( Operation operation )
141 		{
142 		}
143 	}
144 }