/******************************************************************************* * Copyright (c) 2013 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.ui.rcp.handlers; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; import java.util.Set; import javax.persistence.EntityManager; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.jubula.client.core.model.IExecTestCasePO; 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.model.ITestCasePO; import org.eclipse.jubula.client.core.model.NodeMaker; import org.eclipse.jubula.client.core.persistence.GeneralStorage; import org.eclipse.jubula.client.ui.handlers.AbstractSelectionBasedHandler; import org.eclipse.jubula.client.ui.rcp.Plugin; import org.eclipse.jubula.client.ui.rcp.i18n.Messages; import org.eclipse.jubula.client.ui.rcp.search.SearchResultPage; import org.eclipse.jubula.client.ui.rcp.search.result.BasicSearchResult.SearchResultElement; import org.eclipse.jubula.client.ui.rcp.utils.SearchPageUtils; import org.eclipse.jubula.client.ui.rcp.wizards.search.refactor.SearchReplaceTCRWizard; import org.eclipse.jubula.client.ui.utils.ErrorHandlingUtil; import org.eclipse.jubula.tools.internal.messagehandling.MessageIDs; import org.eclipse.swt.widgets.Shell; /** * * @author BREDEX GmbH * */ public class SearchReplaceTestCaseHandler extends AbstractSelectionBasedHandler { /** * {@inheritDoc} */ @SuppressWarnings("unchecked") protected Object executeImpl(ExecutionEvent event) { if (!Plugin.getDefault().showSaveEditorDialog(getActiveShell())) { return null; } IStructuredSelection selectedObject = getSelection(); List<SearchResultElement<Long>> selectionList = selectedObject.toList(); Set<IExecTestCasePO> execList = new LinkedHashSet<IExecTestCasePO>(); EntityManager session = GeneralStorage.getInstance().getMasterSession(); ISpecTestCasePO firstSpec = null; IProjectPO project = GeneralStorage.getInstance().getProject(); boolean error = false; try { for (Iterator iterator = selectionList.iterator(); iterator .hasNext();) { Object object = iterator.next(); SearchResultElement<Long> searchResult = (SearchResultElement<Long>) object; INodePO nodePO = session.find(NodeMaker.getNodePOClass(), searchResult.getData()); if (nodePO instanceof IExecTestCasePO) { IExecTestCasePO exec = (IExecTestCasePO) nodePO; if (exec.getParentProjectId().equals(project.getId())) { // This only adds execs if they are not from reused // projects execList.add(exec); } else { error = true; } ISpecTestCasePO spec = exec.getSpecTestCase(); if (firstSpec == null) { firstSpec = spec; } if (!firstSpec.equals(spec)) { ErrorHandlingUtil .createMessageDialog( MessageIDs.I_NOT_SAME_SPEC); return null; } } else { error = true; } } } catch (Exception e) { ErrorHandlingUtil.createMessageDialog(MessageIDs.I_NO_EXEC); return null; } if (error) { if (MessageDialog.openQuestion(null, Messages.ReplaceMultiTCRWizardActionDialog, Messages.ReplaceMultiTCRWizardQuestionDeselect)) { SearchResultPage page = SearchPageUtils .getSearchResultPage(event); List<ITestCasePO> bla = new LinkedList<ITestCasePO>(); bla.addAll(execList); SearchPageUtils.selectTestCases(page, selectionList, bla); } return null; } showWizardDialog(execList); return null; } /** * * @param execList * Set of all exec testcases which should be replaced */ private void showWizardDialog(Set<IExecTestCasePO> execList) { WizardDialog dialog; dialog = new WizardDialog(getActiveShell(), new SearchReplaceTCRWizard(execList)) { /** {@inheritDoc} */ protected void configureShell(Shell newShell) { super.configureShell(newShell); } }; dialog.setMinimumPageSize(775, 300); dialog.setPageSize(775, 300); dialog.setHelpAvailable(true); // show ? icon on left bottom dialog.open(); } }