View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2007 eviware.com 
3    *
4    *  soapUI is free software; you can redistribute it and/or modify it under the 
5    *  terms of version 2.1 of the GNU Lesser General Public License as published by 
6    *  the Free Software Foundation.
7    *
8    *  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 
9    *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
10   *  See the GNU Lesser General Public License for more details at gnu.org.
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 }