/*
* SoapUI, Copyright (C) 2004-2016 SmartBear Software
*
* Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent
* versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
*
* http://ec.europa.eu/idabc/eupl
*
* Unless required by applicable law or agreed to in writing, software distributed under the Licence is
* distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the Licence for the specific language governing permissions and limitations
* under the Licence.
*/
package com.eviware.soapui.ui.desktop;
import com.eviware.soapui.model.ModelItem;
import com.eviware.soapui.model.iface.Interface;
import com.eviware.soapui.model.iface.Operation;
import com.eviware.soapui.model.iface.Request;
import com.eviware.soapui.model.mock.MockOperation;
import com.eviware.soapui.model.mock.MockResponse;
import com.eviware.soapui.model.mock.MockService;
import com.eviware.soapui.model.project.Project;
import com.eviware.soapui.model.support.InterfaceListenerAdapter;
import com.eviware.soapui.model.support.MockServiceListenerAdapter;
import com.eviware.soapui.model.support.ProjectListenerAdapter;
import com.eviware.soapui.model.support.TestSuiteListenerAdapter;
import com.eviware.soapui.model.support.WorkspaceListenerAdapter;
import com.eviware.soapui.model.testsuite.LoadTest;
import com.eviware.soapui.model.testsuite.TestCase;
import com.eviware.soapui.model.testsuite.TestStep;
import com.eviware.soapui.model.testsuite.TestSuite;
import com.eviware.soapui.model.workspace.Workspace;
import com.eviware.soapui.security.SecurityTest;
import com.eviware.soapui.support.action.swing.ActionList;
import javax.swing.JComponent;
import java.util.HashSet;
import java.util.Set;
/**
* Abstract SoapUIDesktop implementation for extension
*
* @author ole.matzura
*/
public abstract class AbstractSoapUIDesktop implements SoapUIDesktop {
private final Workspace workspace;
private final InternalProjectListener projectListener = new InternalProjectListener();
private final InternalInterfaceListener interfaceListener = new InternalInterfaceListener();
private final InternalTestSuiteListener testSuiteListener = new InternalTestSuiteListener();
private final InternalMockServiceListener mockServiceListener = new InternalMockServiceListener();
private Set<DesktopListener> listeners = new HashSet<DesktopListener>();
private InternalWorkspaceListener workspaceListener = new InternalWorkspaceListener();
public AbstractSoapUIDesktop(Workspace workspace) {
this.workspace = workspace;
initListeners();
}
private void initListeners() {
workspace.addWorkspaceListener(workspaceListener);
for (int c = 0; c < workspace.getProjectCount(); c++) {
listenToProject(workspace.getProjectAt(c));
}
}
public ActionList getActions() {
return null;
}
private void listenToProject(Project project) {
project.addProjectListener(projectListener);
for (int i = 0; i < project.getInterfaceCount(); i++) {
project.getInterfaceAt(i).addInterfaceListener(interfaceListener);
}
for (int i = 0; i < project.getTestSuiteCount(); i++) {
project.getTestSuiteAt(i).addTestSuiteListener(testSuiteListener);
}
for (int i = 0; i < project.getMockServiceCount(); i++) {
project.getMockServiceAt(i).addMockServiceListener(mockServiceListener);
}
}
public void addDesktopListener(DesktopListener listener) {
listeners.add(listener);
}
public void removeDesktopListener(DesktopListener listener) {
listeners.remove(listener);
}
public void closeDependantPanels(ModelItem modelItem) {
DesktopPanel[] panels = getDesktopPanels();
for (int c = 0; c < panels.length; c++) {
if (panels[c].dependsOn(modelItem)) {
closeDesktopPanel(panels[c]);
}
}
}
protected void fireDesktopPanelCreated(DesktopPanel desktopPanel) {
if (!listeners.isEmpty()) {
DesktopListener[] array = listeners.toArray(new DesktopListener[listeners.size()]);
for (DesktopListener listener : array) {
listener.desktopPanelCreated(desktopPanel);
}
}
}
protected void fireDesktopPanelSelected(DesktopPanel desktopPanel) {
if (!listeners.isEmpty()) {
DesktopListener[] array = listeners.toArray(new DesktopListener[listeners.size()]);
for (DesktopListener listener : array) {
listener.desktopPanelSelected(desktopPanel);
}
}
}
protected void fireDesktopPanelClosed(DesktopPanel desktopPanel) {
if (!listeners.isEmpty()) {
DesktopListener[] array = listeners.toArray(new DesktopListener[listeners.size()]);
for (DesktopListener listener : array) {
listener.desktopPanelClosed(desktopPanel);
}
}
}
private class InternalWorkspaceListener extends WorkspaceListenerAdapter {
public void projectRemoved(Project project) {
project.removeProjectListener(projectListener);
closeDependantPanels(project);
}
public void projectAdded(Project project) {
listenToProject(project);
}
}
private class InternalProjectListener extends ProjectListenerAdapter {
public void interfaceRemoved(Interface iface) {
iface.removeInterfaceListener(interfaceListener);
closeDependantPanels(iface);
}
public void testSuiteRemoved(TestSuite testSuite) {
testSuite.removeTestSuiteListener(testSuiteListener);
closeDependantPanels(testSuite);
}
public void interfaceAdded(Interface iface) {
iface.addInterfaceListener(interfaceListener);
}
public void testSuiteAdded(TestSuite testSuite) {
testSuite.addTestSuiteListener(testSuiteListener);
}
public void mockServiceAdded(MockService mockService) {
mockService.addMockServiceListener(mockServiceListener);
}
public void mockServiceRemoved(MockService mockService) {
mockService.removeMockServiceListener(mockServiceListener);
closeDependantPanels(mockService);
}
}
private class InternalInterfaceListener extends InterfaceListenerAdapter {
public void operationRemoved(Operation operation) {
closeDependantPanels(operation);
}
public void requestRemoved(Request request) {
closeDependantPanels(request);
}
}
private class InternalTestSuiteListener extends TestSuiteListenerAdapter {
public void testCaseRemoved(TestCase testCase) {
closeDependantPanels(testCase);
}
public void testStepRemoved(TestStep testStep, int index) {
closeDependantPanels(testStep);
}
public void loadTestRemoved(LoadTest loadTest) {
closeDependantPanels(loadTest);
}
public void securityTestRemoved(SecurityTest securityTest) {
closeDependantPanels(securityTest);
}
}
private class InternalMockServiceListener extends MockServiceListenerAdapter {
public void mockOperationRemoved(MockOperation operation) {
closeDependantPanels(operation);
}
public void mockResponseRemoved(MockResponse request) {
closeDependantPanels(request);
}
}
public void release() {
for (int c = 0; c < workspace.getProjectCount(); c++) {
Project project = workspace.getProjectAt(c);
project.removeProjectListener(projectListener);
for (int i = 0; i < project.getInterfaceCount(); i++) {
project.getInterfaceAt(i).removeInterfaceListener(interfaceListener);
}
for (int i = 0; i < project.getTestSuiteCount(); i++) {
project.getTestSuiteAt(i).removeTestSuiteListener(testSuiteListener);
}
for (int i = 0; i < project.getMockServiceCount(); i++) {
project.getMockServiceAt(i).removeMockServiceListener(mockServiceListener);
}
}
workspace.removeWorkspaceListener(workspaceListener);
}
public void init() {
}
@Override
public void showInspector(JComponent component) {
}
}