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 private PropertiesTreeNode<?> propertiesTreeNode;
39
40 public MockServiceTreeNode(MockService mockService, SoapUITreeModel treeModel )
41 {
42 super( mockService, mockService.getProject(), treeModel );
43
44 mockServiceListener = new InternalMockServiceListener();
45 mockService.addMockServiceListener( mockServiceListener );
46
47 for( int c = 0; c < mockService.getMockOperationCount(); c++ )
48 {
49 MockOperation mockOperation = mockService.getMockOperationAt( c );
50 mockOperation.addPropertyChangeListener( MockService.NAME_PROPERTY, propertyChangeListener );
51 mockOperationNodes.add( new MockOperationTreeNode( mockOperation, getTreeModel() ));
52 }
53
54 initOrdering( mockOperationNodes, UISettings.ORDER_MOCKOPERATION );
55
56 getTreeModel().mapModelItems( mockOperationNodes );
57
58 propertiesTreeNode = PropertiesTreeNode.createDefaultPropertiesNode( mockService, getTreeModel() );
59 getTreeModel().mapModelItem( propertiesTreeNode );
60 }
61
62 public void release()
63 {
64 super.release();
65
66 getModelItem().removeMockServiceListener( mockServiceListener );
67
68 for( MockOperationTreeNode treeNode : mockOperationNodes )
69 {
70 treeNode.getModelItem().removePropertyChangeListener( propertyChangeListener );
71 treeNode.release();
72 }
73
74 propertiesTreeNode.release();
75 }
76
77 public MockService getMockService()
78 {
79 return (MockService) getModelItem();
80 }
81
82 public int getChildCount()
83 {
84 int propMod = getTreeModel().isShowProperties() ? 1 : 0;
85 return mockOperationNodes.size() + propMod;
86 }
87
88 public int getIndexOfChild(Object child)
89 {
90 int propMod = getTreeModel().isShowProperties() ? 1 : 0;
91 if( propMod == 1 && child == propertiesTreeNode )
92 return 0;
93
94 int ix = mockOperationNodes.indexOf( child );
95 return ix == -1 ? ix : ix+propMod;
96 }
97
98 public SoapUITreeNode getChildNode(int index)
99 {
100 int propMod = getTreeModel().isShowProperties() ? 1 : 0;
101 return index == 0 && propMod == 1 ? propertiesTreeNode : mockOperationNodes.get( index-propMod );
102 }
103
104 private final class InternalMockServiceListener implements MockServiceListener
105 {
106 public void mockOperationAdded( MockOperation mockOperation )
107 {
108 MockOperationTreeNode mockOperationTreeNode = new MockOperationTreeNode( mockOperation, getTreeModel() );
109 mockOperationNodes.add( mockOperationTreeNode);
110 mockOperation.addPropertyChangeListener( propertyChangeListener );
111 getTreeModel().notifyNodeInserted( mockOperationTreeNode );
112 }
113
114 public void mockOperationRemoved( MockOperation mockOperation )
115 {
116 SoapUITreeNode treeNode = getTreeModel().getTreeNode( mockOperation );
117 if( mockOperationNodes.contains( treeNode ))
118 {
119 getTreeModel().notifyNodeRemoved( treeNode );
120 mockOperation.removePropertyChangeListener( propertyChangeListener );
121 mockOperationNodes.remove( treeNode );
122 }
123 else throw new RuntimeException( "Removing unkown mockOperation" );
124 }
125
126 public void mockResponseAdded( MockResponse mockResponse )
127 {
128 MockOperationTreeNode operationTreeNode = (MockOperationTreeNode) getTreeModel().getTreeNode( mockResponse.getMockOperation() );
129 if( operationTreeNode != null )
130 operationTreeNode.mockResponseAdded( mockResponse );
131 else
132 throw new RuntimeException( "Adding mockResponse to unknwown MockOperation" );
133 }
134
135 public void mockResponseRemoved( MockResponse mockResponse )
136 {
137 MockOperationTreeNode operationTreeNode = (MockOperationTreeNode) getTreeModel().getTreeNode( mockResponse.getMockOperation() );
138 if( operationTreeNode != null )
139 operationTreeNode.mockResponseRemoved( mockResponse );
140 else
141 throw new RuntimeException( "Removing mockResponse from unknown MockOperation" );
142 }
143 }
144 }