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.ActionList;
37
38 public abstract class AbstractSoapUIDesktop implements SoapUIDesktop
39 {
40 private final Workspace workspace;
41 private final InternalProjectListener projectListener = new InternalProjectListener();
42 private final InternalInterfaceListener interfaceListener = new InternalInterfaceListener();
43 private final InternalTestSuiteListener testSuiteListener = new InternalTestSuiteListener();
44 private final InternalMockServiceListener mockServiceListener = new InternalMockServiceListener();
45 private Set<DesktopListener> listeners = new HashSet<DesktopListener>();
46
47 public AbstractSoapUIDesktop(Workspace workspace)
48 {
49 this.workspace = workspace;
50
51 initListeners();
52 }
53
54 private void initListeners()
55 {
56 workspace.addWorkspaceListener(new InternalWorkspaceListener());
57
58 for (int c = 0; c < workspace.getProjectCount(); c++)
59 {
60 listenToProject(workspace.getProjectAt(c));
61 }
62 }
63
64 public ActionList getActions()
65 {
66 return null;
67 }
68
69 private void listenToProject(Project project)
70 {
71 project.addProjectListener(projectListener);
72
73 for (int i = 0; i < project.getInterfaceCount(); i++)
74 {
75 project.getInterfaceAt(i).addInterfaceListener(interfaceListener);
76 }
77
78 for (int i = 0; i < project.getTestSuiteCount(); i++)
79 {
80 project.getTestSuiteAt(i).addTestSuiteListener(testSuiteListener);
81 }
82
83 for (int i = 0; i < project.getMockServiceCount(); i++)
84 {
85 project.getMockServiceAt(i).addMockServiceListener(mockServiceListener);
86 }
87 }
88
89 public void addDesktopListener(DesktopListener listener)
90 {
91 listeners.add(listener);
92 }
93
94 public void removeDesktopListener(DesktopListener listener)
95 {
96 listeners.remove(listener);
97 }
98
99 public void closeDependantPanels(ModelItem modelItem)
100 {
101 DesktopPanel[] panels = getDesktopPanels();
102
103 for (int c = 0; c < panels.length; c++)
104 {
105 if (panels[c].dependsOn(modelItem))
106 {
107 closeDesktopPanel(panels[c]);
108 }
109 }
110 }
111
112 protected void fireDesktopPanelCreated(DesktopPanel desktopPanel)
113 {
114 if (!listeners.isEmpty())
115 {
116 DesktopListener[] array = listeners.toArray(new DesktopListener[listeners.size()]);
117 for (DesktopListener listener : array)
118 listener.desktopPanelCreated(desktopPanel);
119 }
120 }
121
122 protected void fireDesktopPanelSelected(DesktopPanel desktopPanel)
123 {
124 if (!listeners.isEmpty())
125 {
126 DesktopListener[] array = listeners.toArray(new DesktopListener[listeners.size()]);
127 for (DesktopListener listener : array)
128 listener.desktopPanelSelected(desktopPanel);
129 }
130 }
131
132 protected void fireDesktopPanelClosed(DesktopPanel desktopPanel)
133 {
134 if (!listeners.isEmpty())
135 {
136 DesktopListener[] array = listeners.toArray(new DesktopListener[listeners.size()]);
137 for (DesktopListener listener : array)
138 listener.desktopPanelClosed(desktopPanel);
139 }
140 }
141
142 private class InternalWorkspaceListener extends WorkspaceListenerAdapter
143 {
144 public void projectRemoved(Project project)
145 {
146 project.removeProjectListener(projectListener);
147 closeDependantPanels(project);
148 }
149
150 public void projectAdded(Project project)
151 {
152 listenToProject( project );
153 }
154 }
155
156 private class InternalProjectListener extends ProjectListenerAdapter
157 {
158 public void interfaceRemoved(Interface iface)
159 {
160 iface.removeInterfaceListener(interfaceListener);
161 closeDependantPanels(iface);
162 }
163
164 public void testSuiteRemoved(TestSuite testSuite)
165 {
166 testSuite.removeTestSuiteListener(testSuiteListener);
167 closeDependantPanels(testSuite);
168 }
169
170 public void interfaceAdded(Interface iface)
171 {
172 iface.addInterfaceListener(interfaceListener);
173 }
174
175 public void testSuiteAdded(TestSuite testSuite)
176 {
177 testSuite.addTestSuiteListener(testSuiteListener);
178 }
179
180 public void mockServiceAdded( MockService mockService )
181 {
182 mockService.addMockServiceListener( mockServiceListener );
183 }
184
185 public void mockServiceRemoved( MockService mockService )
186 {
187 mockService.removeMockServiceListener( mockServiceListener );
188 closeDependantPanels( mockService );
189 }
190 }
191
192 private class InternalInterfaceListener extends InterfaceListenerAdapter
193 {
194 public void operationRemoved(Operation operation)
195 {
196 closeDependantPanels(operation);
197 }
198
199 public void requestRemoved(Request request)
200 {
201 closeDependantPanels(request);
202 }
203 }
204
205 private class InternalTestSuiteListener extends TestSuiteListenerAdapter
206 {
207 public void testCaseRemoved(TestCase testCase)
208 {
209 closeDependantPanels(testCase);
210 }
211
212 public void testStepRemoved(TestStep testStep, int index)
213 {
214 closeDependantPanels(testStep);
215 }
216
217 public void loadTestRemoved(LoadTest loadTest)
218 {
219 closeDependantPanels(loadTest);
220 }
221 }
222
223 private class InternalMockServiceListener extends MockServiceListenerAdapter
224 {
225 public void mockOperationRemoved( MockOperation operation )
226 {
227 closeDependantPanels( operation );
228 }
229
230 public void mockResponseRemoved( MockResponse request )
231 {
232 closeDependantPanels( request );
233 }
234 }
235 }