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