1
2
3
4
5
6
7
8
9
10
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 }