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 com.eviware.soapui.impl.rest.RestResource;
16  import com.eviware.soapui.model.iface.Interface;
17  import com.eviware.soapui.model.iface.InterfaceListener;
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.model.tree.TreeNodeFactory;
24  
25  import java.util.ArrayList;
26  import java.util.List;
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<OperationTreeNode> operationNodes = new ArrayList<OperationTreeNode>();
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( (OperationTreeNode) 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( OperationTreeNode 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           OperationTreeNode operationTreeNode = (OperationTreeNode) getTreeModel().getTreeNode( request.getOperation() );
89           if( operationTreeNode != null )
90              operationTreeNode.requestAdded( request );
91        }
92  
93        public void requestRemoved( Request request )
94        {
95           OperationTreeNode operationTreeNode = (OperationTreeNode) getTreeModel().getTreeNode( request.getOperation() );
96           if( operationTreeNode != null )
97              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( restResource.getParentResource() );
108                treeNode.addChildResource( restResource );
109                return;
110             }
111          }
112 
113          OperationTreeNode operationTreeNode = (OperationTreeNode) TreeNodeFactory.createTreeNode( operation, getTreeModel() );
114 
115          operationNodes.add( operationTreeNode );
116          getTreeModel().notifyNodeInserted( operationTreeNode );
117       }
118 
119       public void operationRemoved( Operation operation )
120       {
121          SoapUITreeNode treeNode = getTreeModel().getTreeNode( operation );
122          if( operationNodes.contains( treeNode ) )
123          {
124             getTreeModel().notifyNodeRemoved( treeNode );
125             operationNodes.remove( treeNode );
126          }
127          else if( treeNode instanceof RestResourceTreeNode )
128          {
129             SoapUITreeNode parentNode = treeNode.getParentTreeNode();
130             if( parentNode instanceof RestResourceTreeNode )
131             {
132                ((RestResourceTreeNode)parentNode).removeChildResource( (RestResourceTreeNode)treeNode );
133             }
134          }
135          else throw new RuntimeException( "Removing unkown operation" );
136       }
137 
138       public void operationUpdated( Operation operation )
139       {
140       }
141    }
142 }