/******************************************************************************* * 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.HashSet; 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.wizard.WizardDialog; import org.eclipse.jubula.client.core.model.INodePO; 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.refactor.param.ChangeCtdsColumnUsageWizard; import org.eclipse.jubula.client.ui.rcp.wizards.refactor.param.ExistingAndNewParameterData; import org.eclipse.jubula.client.ui.rcp.wizards.refactor.param.TestCasesValidator; import org.eclipse.jubula.client.ui.utils.ErrorHandlingUtil; import org.eclipse.jubula.tools.internal.messagehandling.MessageIDs; /** * Handler for context menu in a search result list to change CTDS column usage. * @author BREDEX GmbH */ public class SearchChangeCtdsColumnUsageHandler extends AbstractSelectionBasedHandler { /** * {@inheritDoc} */ protected Object executeImpl(ExecutionEvent event) { SearchResultPage page = SearchPageUtils.getSearchResultPage(event); if (page == null) { return null; } if (!Plugin.getDefault().showSaveEditorDialog(getActiveShell())) { return null; } // create list of selected Test Cases @SuppressWarnings("unchecked") List<SearchResultElement<Long>> oldSelection = getSelection().toList(); Set<ITestCasePO> testCases = new HashSet<ITestCasePO>(); EntityManager session = GeneralStorage.getInstance().getMasterSession(); for (SearchResultElement<Long> searchResult: oldSelection) { INodePO nodePO = session.find(NodeMaker.getNodePOClass(), searchResult.getData()); if (nodePO instanceof ITestCasePO) { testCases.add((ITestCasePO) nodePO); } } // validate the selected Test Cases TestCasesValidator validator = new TestCasesValidator(testCases); if (!validator.isReferencedDataCubeOk()) { ErrorHandlingUtil.createMessageDialog( MessageIDs.I_ALL_TCS_MUST_USE_SAME_CTDS); return null; } if (!validator.areAllTestCasesOk()) { if (MessageDialog.openQuestion(null, Messages.ChangeCtdsColumnUsageActionDialog, Messages.ChangeCtdsColumnUsageQuestionDeselect)) { SearchPageUtils.selectTestCases(page, oldSelection, validator.getValidTestCases()); } return null; } // create for each parameter name a corresponding set of execution Test Cases ExistingAndNewParameterData paramData = new ExistingAndNewParameterData(validator.getValidTestCases()); if (paramData.getAllParamDescriptions().length == 0) { ErrorHandlingUtil.createMessageDialog( MessageIDs.I_TCS_HAVE_NO_CHANGEABLE_PARAMETER_NAME); return null; } showWizardDialog(paramData); return null; } /** * Show the dialog for changing CTDS column usage. * @param paramData The parameter names of the selected Test Cases. */ private void showWizardDialog( ExistingAndNewParameterData paramData) { WizardDialog dialog; dialog = new WizardDialog(getActiveShell(), new ChangeCtdsColumnUsageWizard(paramData)); dialog.setHelpAvailable(true); // show ? icon on left bottom dialog.open(); } }