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.model.mock.MockOperation;
19 import com.eviware.soapui.model.mock.MockResponse;
20 import com.eviware.soapui.model.mock.MockService;
21 import com.eviware.soapui.model.mock.MockServiceListener;
22 import com.eviware.soapui.model.tree.AbstractModelItemTreeNode;
23 import com.eviware.soapui.model.tree.SoapUITreeModel;
24 import com.eviware.soapui.model.tree.SoapUITreeNode;
25 import com.eviware.soapui.settings.UISettings;
26
27 /***
28 * SoapUITreeNode for MockService implementations
29 *
30 * @author Ole.Matzura
31 */
32
33 public class MockServiceTreeNode extends AbstractModelItemTreeNode<MockService>
34 {
35 private ReorderPropertyChangeListener propertyChangeListener = new ReorderPropertyChangeListener();
36 private List<MockOperationTreeNode> mockOperationNodes = new ArrayList<MockOperationTreeNode>();
37 private InternalMockServiceListener mockServiceListener;
38
39 public MockServiceTreeNode(MockService mockService, SoapUITreeModel treeModel )
40 {
41 super( mockService, mockService.getProject(), treeModel );
42
43 mockServiceListener = new InternalMockServiceListener();
44 mockService.addMockServiceListener( mockServiceListener );
45
46 for( int c = 0; c < mockService.getMockOperationCount(); c++ )
47 {
48 MockOperation mockOperation = mockService.getMockOperationAt( c );
49 mockOperation.addPropertyChangeListener( MockService.NAME_PROPERTY, propertyChangeListener );
50 mockOperationNodes.add( new MockOperationTreeNode( mockOperation, getTreeModel() ));
51 }
52
53 initOrdering( mockOperationNodes, UISettings.ORDER_MOCKOPERATION );
54
55 getTreeModel().mapModelItems( mockOperationNodes );
56 }
57
58 public void release()
59 {
60 super.release();
61
62 getModelItem().removeMockServiceListener( mockServiceListener );
63
64 for( MockOperationTreeNode treeNode : mockOperationNodes )
65 {
66 treeNode.getModelItem().removePropertyChangeListener( propertyChangeListener );
67 treeNode.release();
68 }
69 }
70
71 public MockService getMockService()
72 {
73 return (MockService) getModelItem();
74 }
75
76 public int getChildCount()
77 {
78 return mockOperationNodes.size();
79 }
80
81 public int getIndexOfChild(Object child)
82 {
83 return mockOperationNodes.indexOf( child );
84 }
85
86 public SoapUITreeNode getChildNode(int index)
87 {
88 return mockOperationNodes.get( index );
89 }
90
91 private final class InternalMockServiceListener implements MockServiceListener
92 {
93 public void mockOperationAdded( MockOperation mockOperation )
94 {
95 MockOperationTreeNode mockOperationTreeNode = new MockOperationTreeNode( mockOperation, getTreeModel() );
96 mockOperationNodes.add( mockOperationTreeNode);
97 mockOperation.addPropertyChangeListener( propertyChangeListener );
98 getTreeModel().notifyNodeInserted( mockOperationTreeNode );
99 }
100
101 public void mockOperationRemoved( MockOperation mockOperation )
102 {
103 SoapUITreeNode treeNode = getTreeModel().getTreeNode( mockOperation );
104 if( mockOperationNodes.contains( treeNode ))
105 {
106 getTreeModel().notifyNodeRemoved( treeNode );
107 mockOperation.removePropertyChangeListener( propertyChangeListener );
108 mockOperationNodes.remove( treeNode );
109 }
110 else throw new RuntimeException( "Removing unkown mockOperation" );
111 }
112
113 public void mockResponseAdded( MockResponse mockResponse )
114 {
115 MockOperationTreeNode operationTreeNode = (MockOperationTreeNode) getTreeModel().getTreeNode( mockResponse.getMockOperation() );
116 if( operationTreeNode != null )
117 operationTreeNode.mockResponseAdded( mockResponse );
118 else
119 throw new RuntimeException( "Adding mockResponse to unknwown MockOperation" );
120 }
121
122 public void mockResponseRemoved( MockResponse mockResponse )
123 {
124 MockOperationTreeNode operationTreeNode = (MockOperationTreeNode) getTreeModel().getTreeNode( mockResponse.getMockOperation() );
125 if( operationTreeNode != null )
126 operationTreeNode.mockResponseRemoved( mockResponse );
127 else
128 throw new RuntimeException( "Removing mockResponse from unknown MockOperation" );
129
130 }
131 }
132 }