1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.ui.desktop;
14
15 import java.util.HashSet;
16 import java.util.Set;
17
18 import com.eviware.soapui.model.ModelItem;
19 import com.eviware.soapui.model.iface.Interface;
20 import com.eviware.soapui.model.iface.Operation;
21 import com.eviware.soapui.model.iface.Request;
22 import com.eviware.soapui.model.mock.MockOperation;
23 import com.eviware.soapui.model.mock.MockResponse;
24 import com.eviware.soapui.model.mock.MockService;
25 import com.eviware.soapui.model.project.Project;
26 import com.eviware.soapui.model.support.InterfaceListenerAdapter;
27 import com.eviware.soapui.model.support.MockServiceListenerAdapter;
28 import com.eviware.soapui.model.support.ProjectListenerAdapter;
29 import com.eviware.soapui.model.support.TestSuiteListenerAdapter;
30 import com.eviware.soapui.model.support.WorkspaceListenerAdapter;
31 import com.eviware.soapui.model.testsuite.LoadTest;
32 import com.eviware.soapui.model.testsuite.TestCase;
33 import com.eviware.soapui.model.testsuite.TestStep;
34 import com.eviware.soapui.model.testsuite.TestSuite;
35 import com.eviware.soapui.model.workspace.Workspace;
36 import com.eviware.soapui.support.action.swing.ActionList;
37
38 /***
39 * Abstract SoapUIDesktop implementation for extension
40 *
41 * @author ole.matzura
42 */
43
44 public abstract class AbstractSoapUIDesktop implements SoapUIDesktop
45 {
46 private final Workspace workspace;
47 private final InternalProjectListener projectListener = new InternalProjectListener();
48 private final InternalInterfaceListener interfaceListener = new InternalInterfaceListener();
49 private final InternalTestSuiteListener testSuiteListener = new InternalTestSuiteListener();
50 private final InternalMockServiceListener mockServiceListener = new InternalMockServiceListener();
51 private Set<DesktopListener> listeners = new HashSet<DesktopListener>();
52 private InternalWorkspaceListener workspaceListener = new InternalWorkspaceListener();
53
54 public AbstractSoapUIDesktop(Workspace workspace)
55 {
56 this.workspace = workspace;
57
58 initListeners();
59 }
60
61 private void initListeners()
62 {
63 workspace.addWorkspaceListener(workspaceListener);
64
65 for (int c = 0; c < workspace.getProjectCount(); c++)
66 {
67 listenToProject(workspace.getProjectAt(c));
68 }
69 }
70
71 public ActionList getActions()
72 {
73 return null;
74 }
75
76 private void listenToProject(Project project)
77 {
78 project.addProjectListener(projectListener);
79
80 for (int i = 0; i < project.getInterfaceCount(); i++)
81 {
82 project.getInterfaceAt(i).addInterfaceListener(interfaceListener);
83 }
84
85 for (int i = 0; i < project.getTestSuiteCount(); i++)
86 {
87 project.getTestSuiteAt(i).addTestSuiteListener(testSuiteListener);
88 }
89
90 for (int i = 0; i < project.getMockServiceCount(); i++)
91 {
92 project.getMockServiceAt(i).addMockServiceListener(mockServiceListener);
93 }
94 }
95
96 public void addDesktopListener(DesktopListener listener)
97 {
98 listeners.add(listener);
99 }
100
101 public void removeDesktopListener(DesktopListener listener)
102 {
103 listeners.remove(listener);
104 }
105
106 public void closeDependantPanels(ModelItem modelItem)
107 {
108 DesktopPanel[] panels = getDesktopPanels();
109
110 for (int c = 0; c < panels.length; c++)
111 {
112 if (panels[c].dependsOn(modelItem))
113 {
114 closeDesktopPanel(panels[c]);
115 }
116 }
117 }
118
119 protected void fireDesktopPanelCreated(DesktopPanel desktopPanel)
120 {
121 if (!listeners.isEmpty())
122 {
123 DesktopListener[] array = listeners.toArray(new DesktopListener[listeners.size()]);
124 for (DesktopListener listener : array)
125 listener.desktopPanelCreated(desktopPanel);
126 }
127 }
128
129 protected void fireDesktopPanelSelected(DesktopPanel desktopPanel)
130 {
131 if (!listeners.isEmpty())
132 {
133 DesktopListener[] array = listeners.toArray(new DesktopListener[listeners.size()]);
134 for (DesktopListener listener : array)
135 listener.desktopPanelSelected(desktopPanel);
136 }
137 }
138
139 protected void fireDesktopPanelClosed(DesktopPanel desktopPanel)
140 {
141 if (!listeners.isEmpty())
142 {
143 DesktopListener[] array = listeners.toArray(new DesktopListener[listeners.size()]);
144 for (DesktopListener listener : array)
145 listener.desktopPanelClosed(desktopPanel);
146 }
147 }
148
149 private class InternalWorkspaceListener extends WorkspaceListenerAdapter
150 {
151 public void projectRemoved(Project project)
152 {
153 project.removeProjectListener(projectListener);
154 closeDependantPanels(project);
155 }
156
157 public void projectAdded(Project project)
158 {
159 listenToProject( project );
160 }
161 }
162
163 private class InternalProjectListener extends ProjectListenerAdapter
164 {
165 public void interfaceRemoved(Interface iface)
166 {
167 iface.removeInterfaceListener(interfaceListener);
168 closeDependantPanels(iface);
169 }
170
171 public void testSuiteRemoved(TestSuite testSuite)
172 {
173 testSuite.removeTestSuiteListener(testSuiteListener);
174 closeDependantPanels(testSuite);
175 }
176
177 public void interfaceAdded(Interface iface)
178 {
179 iface.addInterfaceListener(interfaceListener);
180 }
181
182 public void testSuiteAdded(TestSuite testSuite)
183 {
184 testSuite.addTestSuiteListener(testSuiteListener);
185 }
186
187 public void mockServiceAdded( MockService mockService )
188 {
189 mockService.addMockServiceListener( mockServiceListener );
190 }
191
192 public void mockServiceRemoved( MockService mockService )
193 {
194 mockService.removeMockServiceListener( mockServiceListener );
195 closeDependantPanels( mockService );
196 }
197 }
198
199 private class InternalInterfaceListener extends InterfaceListenerAdapter
200 {
201 public void operationRemoved(Operation operation)
202 {
203 closeDependantPanels(operation);
204 }
205
206 public void requestRemoved(Request request)
207 {
208 closeDependantPanels(request);
209 }
210 }
211
212 private class InternalTestSuiteListener extends TestSuiteListenerAdapter
213 {
214 public void testCaseRemoved(TestCase testCase)
215 {
216 closeDependantPanels(testCase);
217 }
218
219 public void testStepRemoved(TestStep testStep, int index)
220 {
221 closeDependantPanels(testStep);
222 }
223
224 public void loadTestRemoved(LoadTest loadTest)
225 {
226 closeDependantPanels(loadTest);
227 }
228 }
229
230 private class InternalMockServiceListener extends MockServiceListenerAdapter
231 {
232 public void mockOperationRemoved( MockOperation operation )
233 {
234 closeDependantPanels( operation );
235 }
236
237 public void mockResponseRemoved( MockResponse request )
238 {
239 closeDependantPanels( request );
240 }
241 }
242
243 public void release()
244 {
245 for (int c = 0; c < workspace.getProjectCount(); c++)
246 {
247 Project project = workspace.getProjectAt( c );
248 project.removeProjectListener(projectListener);
249
250 for (int i = 0; i < project.getInterfaceCount(); i++)
251 {
252 project.getInterfaceAt(i).removeInterfaceListener(interfaceListener);
253 }
254
255 for (int i = 0; i < project.getTestSuiteCount(); i++)
256 {
257 project.getTestSuiteAt(i).removeTestSuiteListener(testSuiteListener);
258 }
259
260 for (int i = 0; i < project.getMockServiceCount(); i++)
261 {
262 project.getMockServiceAt(i).removeMockServiceListener(mockServiceListener);
263 }
264 }
265
266 workspace.removeWorkspaceListener( workspaceListener );
267 }
268
269 public void init()
270 {
271 }
272 }