/******************************************************************************* * Copyright (c) 2004, 2010 BREDEX GmbH. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * BREDEX GmbH - initial API and implementation and/or initial documentation *******************************************************************************/ package org.eclipse.jubula.client.core.utils; import java.util.Iterator; import org.eclipse.jubula.client.core.model.ICategoryPO; import org.eclipse.jubula.client.core.model.INodePO; import org.eclipse.jubula.client.core.model.IProjectPO; import org.eclipse.jubula.client.core.model.ISpecTestCasePO; import org.eclipse.jubula.client.core.persistence.ISpecPersistable; /** * @author BREDEX GmbH * @created 12.06.2006 */ public class SpecTreeTraverser extends TreeTraverser { /** * Creates a traverser traversing over all Spec-Nodes (SpecTestCases and CAPs). * @param rootNode the root node (The Project) * @param operation the operation to execute. */ public SpecTreeTraverser(INodePO rootNode, ITreeNodeOperation<INodePO> operation) { super(rootNode, operation); } /** * {@inheritDoc} */ protected void traverseImpl(ITreeTraverserContext<INodePO> context, INodePO parent, INodePO node) { context.append(node); if (context.isContinue()) { for (ITreeNodeOperation<INodePO> operation : getOperations()) { operation.operate(context, parent, node, false); } if (node instanceof IProjectPO) { IProjectPO project = (IProjectPO)node; project.getSpecObjCont().getSpecObjList(); for (ISpecPersistable specPers : project.getSpecObjCont() .getSpecObjList()) { traverseImpl(context, project, specPers); } } else if (node instanceof ICategoryPO) { ICategoryPO catPO = (ICategoryPO)node; Iterator<INodePO> iter = catPO.getNodeListIterator(); while (iter.hasNext()) { INodePO next = iter.next(); traverseImpl(context, catPO, next); } } else if (node instanceof ISpecTestCasePO) { ISpecTestCasePO specTC = (ISpecTestCasePO)node; Iterator<? extends INodePO> iter = specTC.getNodeListIterator(); while (iter.hasNext()) { traverseImpl(context, specTC, iter.next()); } iter = specTC.getAllEventEventExecTC().iterator(); while (iter.hasNext()) { traverseImpl(context, specTC, iter.next()); } } for (ITreeNodeOperation<INodePO> operation : getOperations()) { operation.postOperate(context, parent, node, false); } } context.removeLast(); } }