/* * 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.model.tree.nodes; import com.eviware.soapui.model.iface.Interface; import com.eviware.soapui.model.mock.MockService; import com.eviware.soapui.model.project.Project; import com.eviware.soapui.model.support.ProjectListenerAdapter; import com.eviware.soapui.model.testsuite.TestSuite; import com.eviware.soapui.model.tree.AbstractModelItemTreeNode; import com.eviware.soapui.model.tree.SoapUITreeNode; import com.eviware.soapui.settings.UISettings; import java.util.ArrayList; import java.util.List; /** * SoapUITreeNode for Project implementations * * @author Ole.Matzura */ public class ProjectTreeNode extends AbstractModelItemTreeNode<Project> { private InternalProjectListener internalProjectListener; private List<InterfaceTreeNode> interfaceNodes = new ArrayList<InterfaceTreeNode>(); private List<TestSuiteTreeNode> testSuiteNodes = new ArrayList<TestSuiteTreeNode>(); private List<MockServiceTreeNode> mockServiceNodes = new ArrayList<MockServiceTreeNode>(); private PropertiesTreeNode<?> propertiesTreeNode; public ProjectTreeNode(Project project, WorkspaceTreeNode workspaceNode) { super(project, workspaceNode.getWorkspace(), workspaceNode.getTreeModel()); if (!project.isOpen()) { return; } internalProjectListener = new InternalProjectListener(); project.addProjectListener(internalProjectListener); for (int c = 0; c < project.getInterfaceCount(); c++) { Interface iface = project.getInterfaceAt(c); interfaceNodes.add(new InterfaceTreeNode(iface, getTreeModel())); } for (int c = 0; c < project.getTestSuiteCount(); c++) { testSuiteNodes.add(new TestSuiteTreeNode(project.getTestSuiteAt(c), getTreeModel())); } for (int c = 0; c < project.getMockServiceCount(); c++) { mockServiceNodes.add(new MockServiceTreeNode(project.getMockServiceAt(c), getTreeModel())); } for (int c = 0; c < project.getRestMockServiceCount(); c++) { mockServiceNodes.add(new MockServiceTreeNode(project.getRestMockServiceAt(c), getTreeModel())); } initOrdering(interfaceNodes, UISettings.ORDER_SERVICES); getTreeModel().mapModelItems(interfaceNodes); getTreeModel().mapModelItems(testSuiteNodes); getTreeModel().mapModelItems(mockServiceNodes); propertiesTreeNode = PropertiesTreeNode.createDefaultPropertiesNode(project, getTreeModel()); getTreeModel().mapModelItem(propertiesTreeNode); } public void release() { super.release(); getProject().removeProjectListener(internalProjectListener); for (InterfaceTreeNode treeNode : interfaceNodes) { treeNode.release(); } for (TestSuiteTreeNode treeNode : testSuiteNodes) { treeNode.release(); } for (MockServiceTreeNode treeNode : mockServiceNodes) { treeNode.release(); } if (propertiesTreeNode != null) { propertiesTreeNode.release(); } } public int getChildCount() { if (propertiesTreeNode == null) { return 0; } int propMod = getTreeModel().isShowProperties() ? 1 : 0; return interfaceNodes.size() + testSuiteNodes.size() + mockServiceNodes.size() + propMod; } public int getIndexOfChild(Object child) { if (propertiesTreeNode == null) { return -1; } if (child == propertiesTreeNode) { return 0; } int propMod = getTreeModel().isShowProperties() ? 1 : 0; int index = interfaceNodes.indexOf(child); if (index >= 0) { return index + propMod; } index = testSuiteNodes.indexOf(child); if (index >= 0) { return index + interfaceNodes.size() + propMod; } index = mockServiceNodes.indexOf(child); if (index >= 0) { return index + interfaceNodes.size() + testSuiteNodes.size() + propMod; } return -1; } public SoapUITreeNode getChildNode(int index) { if (propertiesTreeNode == null) { return null; } int propMod = getTreeModel().isShowProperties() ? 1 : 0; if (propMod == 1 && index == 0) { return propertiesTreeNode; } else if (index < interfaceNodes.size() + propMod) { return interfaceNodes.get(index - propMod); } else if (index < testSuiteNodes.size() + interfaceNodes.size() + propMod) { return testSuiteNodes.get(index - interfaceNodes.size() - propMod); } else { return mockServiceNodes.get(index - interfaceNodes.size() - testSuiteNodes.size() - propMod); } } public Project getProject() { return (Project) getModelItem(); } private class InternalProjectListener extends ProjectListenerAdapter { public void interfaceAdded(Interface iface) { InterfaceTreeNode interfaceTreeNode = new InterfaceTreeNode(iface, getTreeModel()); interfaceNodes.add(interfaceTreeNode); reorder(false); getTreeModel().notifyNodeInserted(interfaceTreeNode); } public void interfaceRemoved(Interface iface) { SoapUITreeNode treeNode = getTreeModel().getTreeNode(iface); if (interfaceNodes.contains(treeNode)) { getTreeModel().notifyNodeRemoved(treeNode); interfaceNodes.remove(treeNode); } else { throw new RuntimeException("Removing unkown interface"); } } public void testSuiteAdded(TestSuite testSuite) { TestSuiteTreeNode testSuiteNode = new TestSuiteTreeNode(testSuite, getTreeModel()); testSuiteNodes.add(testSuite.getProject().getIndexOfTestSuite(testSuite), testSuiteNode); getTreeModel().notifyNodeInserted(testSuiteNode); } public void testSuiteRemoved(TestSuite testSuite) { SoapUITreeNode treeNode = getTreeModel().getTreeNode(testSuite); if (testSuiteNodes.contains(treeNode)) { getTreeModel().notifyNodeRemoved(treeNode); testSuiteNodes.remove(treeNode); } else { throw new RuntimeException("Removing unkown testSuite"); } } @Override public void testSuiteMoved(TestSuite testSuite, int index, int offset) { testSuiteRemoved(testSuite); testSuiteAdded(testSuite); } public void mockServiceAdded(MockService mockService) { MockServiceTreeNode mockServiceNode = new MockServiceTreeNode(mockService, getTreeModel()); mockServiceNodes.add(mockServiceNode); getTreeModel().notifyNodeInserted(mockServiceNode); } public void mockServiceRemoved(MockService mockService) { SoapUITreeNode treeNode = getTreeModel().getTreeNode(mockService); if (mockServiceNodes.contains(treeNode)) { getTreeModel().notifyNodeRemoved(treeNode); mockServiceNodes.remove(treeNode); } else { throw new RuntimeException("Removing unkown mockService"); } } } }