/* * 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.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.testsuite.TestSuiteListener; import com.eviware.soapui.model.tree.AbstractModelItemTreeNode; import com.eviware.soapui.model.tree.SoapUITreeModel; import com.eviware.soapui.model.tree.SoapUITreeNode; import com.eviware.soapui.security.SecurityTest; import java.util.ArrayList; import java.util.List; /** * SoapUITreeNode for TestSuite implementations * * @author Ole.Matzura */ public class TestSuiteTreeNode extends AbstractModelItemTreeNode<TestSuite> { private InternalTestSuiteListener internalTestSuiteListener = new InternalTestSuiteListener(); ; private ReorderPropertyChangeListener propertyChangeListener = new ReorderPropertyChangeListener(); private List<TestCaseTreeNode> testCaseNodes = new ArrayList<TestCaseTreeNode>(); private PropertiesTreeNode<?> propertiesTreeNode; public TestSuiteTreeNode(TestSuite testSuite, SoapUITreeModel treeModel) { super(testSuite, testSuite.getProject(), treeModel); testSuite.addTestSuiteListener(internalTestSuiteListener); for (int c = 0; c < testSuite.getTestCaseCount(); c++) { TestCase testCase = testSuite.getTestCaseAt(c); testCase.addPropertyChangeListener(TestCase.NAME_PROPERTY, propertyChangeListener); testCaseNodes.add(new TestCaseTreeNode(testCase, getTreeModel())); } getTreeModel().mapModelItems(testCaseNodes); propertiesTreeNode = PropertiesTreeNode.createDefaultPropertiesNode(testSuite, getTreeModel()); getTreeModel().mapModelItem(propertiesTreeNode); } public void release() { super.release(); getTestSuite().removeTestSuiteListener(internalTestSuiteListener); for (TestCaseTreeNode treeNode : testCaseNodes) { treeNode.getModelItem().removePropertyChangeListener(TestCase.NAME_PROPERTY, propertyChangeListener); treeNode.release(); } propertiesTreeNode.release(); } @Override public int getChildCount() { int propMod = getTreeModel().isShowProperties() ? 1 : 0; return testCaseNodes.size() + propMod; } @Override public SoapUITreeNode getChildNode(int index) { int propMod = getTreeModel().isShowProperties() ? 1 : 0; return index == 0 && propMod == 1 ? propertiesTreeNode : testCaseNodes.get(index - propMod); } @Override public int getIndexOfChild(Object child) { int propMod = getTreeModel().isShowProperties() ? 1 : 0; if (propMod == 1 && child == propertiesTreeNode) { return 0; } int ix = testCaseNodes.indexOf(child); return ix == -1 ? ix : ix + propMod; } public TestSuite getTestSuite() { return (TestSuite) getModelItem(); } private class InternalTestSuiteListener implements TestSuiteListener { public void testCaseAdded(TestCase testCase) { TestCaseTreeNode testCaseTreeNode = new TestCaseTreeNode(testCase, getTreeModel()); testCaseNodes.add(testCase.getTestSuite().getIndexOfTestCase(testCase), testCaseTreeNode); testCase.addPropertyChangeListener(TestCase.NAME_PROPERTY, propertyChangeListener); getTreeModel().notifyNodeInserted(testCaseTreeNode); } public void testCaseRemoved(TestCase testCase) { SoapUITreeNode treeNode = getTreeModel().getTreeNode(testCase); if (testCaseNodes.contains(treeNode)) { getTreeModel().notifyNodeRemoved(treeNode); testCaseNodes.remove(treeNode); testCase.removePropertyChangeListener(propertyChangeListener); } else { throw new RuntimeException("Removing unknown TestCase"); } } public void testStepAdded(TestStep testStep, int index) { TestCaseTreeNode testCaseTreeNode = (TestCaseTreeNode) getTreeModel().getTreeNode(testStep.getTestCase()); if (testCaseTreeNode != null) { testCaseTreeNode.testStepInserted(testStep, index); } } public void testStepRemoved(TestStep testStep, int index) { TestCaseTreeNode testCaseTreeNode = (TestCaseTreeNode) getTreeModel().getTreeNode(testStep.getTestCase()); if (testCaseTreeNode != null) { testCaseTreeNode.testStepRemoved(testStep, index); } } public void loadTestAdded(LoadTest loadTest) { TestCaseTreeNode testCaseTreeNode = (TestCaseTreeNode) getTreeModel().getTreeNode(loadTest.getTestCase()); if (testCaseTreeNode != null) { testCaseTreeNode.loadTestInserted(loadTest); } } public void loadTestRemoved(LoadTest loadTest) { TestCaseTreeNode testCaseTreeNode = (TestCaseTreeNode) getTreeModel().getTreeNode(loadTest.getTestCase()); if (testCaseTreeNode != null) { testCaseTreeNode.loadTestRemoved(loadTest); } } public void testStepMoved(TestStep testStep, int fromIndex, int offset) { TestCaseTreeNode testCaseTreeNode = (TestCaseTreeNode) getTreeModel().getTreeNode(testStep.getTestCase()); if (testCaseTreeNode != null) { testCaseTreeNode.testStepMoved(testStep, fromIndex, offset); } } public void testCaseMoved(TestCase testCase, int index, int offset) { testCaseRemoved(testCase); testCaseAdded(testCase); } @Override public void securityTestAdded(SecurityTest securityTest) { TestCaseTreeNode testCaseTreeNode = (TestCaseTreeNode) getTreeModel() .getTreeNode(securityTest.getTestCase()); if (testCaseTreeNode != null) { testCaseTreeNode.securityTestInserted(securityTest); } } @Override public void securityTestRemoved(SecurityTest securityTest) { TestCaseTreeNode testCaseTreeNode = (TestCaseTreeNode) getTreeModel() .getTreeNode(securityTest.getTestCase()); if (testCaseTreeNode != null) { testCaseTreeNode.securityTestRemoved(securityTest); } } } }