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.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 }