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 treeNode.release();
66 }
67
68 public MockService getMockService()
69 {
70 return (MockService) getModelItem();
71 }
72
73 public int getChildCount()
74 {
75 return mockOperationNodes.size();
76 }
77
78 public int getIndexOfChild(Object child)
79 {
80 return mockOperationNodes.indexOf( child );
81 }
82
83 public SoapUITreeNode getChildNode(int index)
84 {
85 return mockOperationNodes.get( index );
86 }
87
88 private final class InternalMockServiceListener implements MockServiceListener
89 {
90 public void mockOperationAdded( MockOperation mockOperation )
91 {
92 MockOperationTreeNode mockOperationTreeNode = new MockOperationTreeNode( mockOperation, getTreeModel() );
93 mockOperationNodes.add( mockOperationTreeNode);
94 getTreeModel().notifyNodeInserted( mockOperationTreeNode );
95 }
96
97 public void mockOperationRemoved( MockOperation mockOperation )
98 {
99 SoapUITreeNode treeNode = getTreeModel().getTreeNode( mockOperation );
100 if( mockOperationNodes.contains( treeNode ))
101 {
102 getTreeModel().notifyNodeRemoved( treeNode );
103 mockOperationNodes.remove( treeNode );
104 }
105 else throw new RuntimeException( "Removing unkown mockOperation" );
106 }
107
108 public void mockResponseAdded( MockResponse mockResponse )
109 {
110 MockOperationTreeNode operationTreeNode = (MockOperationTreeNode) getTreeModel().getTreeNode( mockResponse.getMockOperation() );
111 if( operationTreeNode != null )
112 operationTreeNode.mockResponseAdded( mockResponse );
113 else
114 throw new RuntimeException( "Adding mockResponse to unknwown MockOperation" );
115 }
116
117 public void mockResponseRemoved( MockResponse mockResponse )
118 {
119 MockOperationTreeNode operationTreeNode = (MockOperationTreeNode) getTreeModel().getTreeNode( mockResponse.getMockOperation() );
120 if( operationTreeNode != null )
121 operationTreeNode.mockResponseRemoved( mockResponse );
122 else
123 throw new RuntimeException( "Removing mockResponse from unknown MockOperation" );
124
125 }
126 }
127 }