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
124 throw new RuntimeException( "Removing unkown mockOperation" );
125 }
126
127 public void mockResponseAdded( MockResponse mockResponse )
128 {
129 MockOperationTreeNode operationTreeNode = ( MockOperationTreeNode )getTreeModel().getTreeNode(
130 mockResponse.getMockOperation() );
131 if( operationTreeNode != null )
132 operationTreeNode.mockResponseAdded( mockResponse );
133 else
134 throw new RuntimeException( "Adding mockResponse to unknwown MockOperation" );
135 }
136
137 public void mockResponseRemoved( MockResponse mockResponse )
138 {
139 MockOperationTreeNode operationTreeNode = ( MockOperationTreeNode )getTreeModel().getTreeNode(
140 mockResponse.getMockOperation() );
141 if( operationTreeNode != null )
142 operationTreeNode.mockResponseRemoved( mockResponse );
143 else
144 throw new RuntimeException( "Removing mockResponse from unknown MockOperation" );
145 }
146 }
147 }