org.eclipse.jubula.client.ui.rcp.handlers.AbstractRefactorHandler.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.jubula.client.ui.rcp.handlers.AbstractRefactorHandler.java

Source

/*******************************************************************************
 * Copyright (c) 2004, 2011 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 org.apache.commons.lang.StringUtils;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.window.Window;
import org.eclipse.jubula.client.core.businessprocess.ParamNameBPDecorator;
import org.eclipse.jubula.client.core.constants.InitialValueConstants;
import org.eclipse.jubula.client.core.model.IExecTestCasePO;
import org.eclipse.jubula.client.core.model.IParamDescriptionPO;
import org.eclipse.jubula.client.core.model.ISpecTestCasePO;
import org.eclipse.jubula.client.core.model.ITcParamDescriptionPO;
import org.eclipse.jubula.client.ui.constants.ContextHelpIds;
import org.eclipse.jubula.client.ui.constants.IconConstants;
import org.eclipse.jubula.client.ui.handlers.AbstractSelectionBasedHandler;
import org.eclipse.jubula.client.ui.rcp.Plugin;
import org.eclipse.jubula.client.ui.rcp.dialogs.InputDialog;
import org.eclipse.jubula.client.ui.rcp.editors.AbstractTestCaseEditor;
import org.eclipse.jubula.client.ui.rcp.i18n.Messages;
import org.eclipse.jubula.client.ui.utils.DialogUtils;
import org.eclipse.jubula.client.ui.utils.ErrorHandlingUtil;
import org.eclipse.jubula.tools.internal.messagehandling.MessageIDs;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.handlers.HandlerUtil;

/**
 * @author BREDEX GmbH
 * @created Jul 14, 2010
 */
public abstract class AbstractRefactorHandler extends AbstractSelectionBasedHandler {
    /**
     * @param event
     *            the execution event
     * @return the new name for the test case or <code>null</code> to indicate
     *         that this action has been canceled
     */
    protected String getNewTestCaseName(ExecutionEvent event) {
        String newTcName = null;
        IWorkbenchPart activePart = HandlerUtil.getActivePart(event);
        if (activePart instanceof AbstractTestCaseEditor) {
            final AbstractTestCaseEditor editor = (AbstractTestCaseEditor) activePart;
            if (editor.isDirty()) {
                Dialog editorDirtyDlg = ErrorHandlingUtil.createMessageDialog(MessageIDs.Q_SAVE_AND_EXTRACT);
                if (editorDirtyDlg.getReturnCode() != Window.OK) {
                    return null;
                }
                editor.doSave(new NullProgressMonitor());
            }
            String extractedTCName = getNewName(editor);
            InputDialog dialog = new InputDialog(getActiveShell(), Messages.NewTestCaseActionTCTitle,
                    extractedTCName, Messages.NewTestCaseActionTCMessage, Messages.RenameActionTCLabel,
                    Messages.RenameActionTCError, Messages.NewTestCaseActionDoubleTCName,
                    IconConstants.NEW_TC_DIALOG_STRING, Messages.NewTestCaseActionTCShell, false);
            dialog.setHelpAvailable(true);
            dialog.create();
            DialogUtils.setWidgetNameForModalDialog(dialog);
            Plugin.getHelpSystem().setHelp(dialog.getShell(), ContextHelpIds.DIALOG_TESTCASE_EXTRACT);
            dialog.open();
            int retCode = dialog.getReturnCode();
            dialog.close();
            if (retCode == Window.OK) {
                newTcName = dialog.getName();
            }
        }
        return newTcName;
    }

    /**
     * @param editor
     *            the current editor
     * @return the new extracted test case name
     */
    private String getNewName(AbstractTestCaseEditor editor) {
        String newName = InitialValueConstants.DEFAULT_TEST_CASE_NAME;
        final IStructuredSelection cs = (IStructuredSelection) editor.getTreeViewer().getSelection();
        if (cs.size() == 1) {
            Object e = cs.getFirstElement();
            if (e instanceof IExecTestCasePO) {
                String execName = ((IExecTestCasePO) e).getName();
                if (!StringUtils.isBlank(execName)) {
                    newName = execName;
                }
            }
        }
        return newName;
    }

    /**
     * @param newSpecTc
     *            new created specTestCase (after extraction)
     * @param mapper
     *            mapper to use for resolving of param names in this context
     */
    public static void registerParamNamesToSave(ISpecTestCasePO newSpecTc, ParamNameBPDecorator mapper) {
        for (IParamDescriptionPO desc : newSpecTc.getParameterList()) {
            mapper.registerParamDescriptions((ITcParamDescriptionPO) desc);
        }
    }
}