/*******************************************************************************
* 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.ui.rcp.editors;
import java.util.Iterator;
import org.eclipse.jface.action.GroupMarker;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jubula.client.core.model.ICompNamesPairPO;
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.ITestSuitePO;
import org.eclipse.jubula.client.core.persistence.GeneralStorage;
import org.eclipse.jubula.client.core.persistence.ProjectPM;
import org.eclipse.jubula.client.ui.constants.CommandIDs;
import org.eclipse.jubula.client.ui.constants.ContextHelpIds;
import org.eclipse.jubula.client.ui.constants.IconConstants;
import org.eclipse.jubula.client.ui.rcp.Plugin;
import org.eclipse.jubula.client.ui.rcp.constants.RCPCommandIDs;
import org.eclipse.jubula.client.ui.rcp.controllers.dnd.TSEditorDropTargetListener;
import org.eclipse.jubula.client.ui.rcp.i18n.Messages;
import org.eclipse.jubula.client.ui.rcp.provider.contentprovider.TestSuiteEditorContentProvider;
import org.eclipse.jubula.client.ui.utils.CommandHelper;
import org.eclipse.jubula.client.ui.utils.ErrorHandlingUtil;
import org.eclipse.jubula.tools.internal.constants.StringConstants;
import org.eclipse.jubula.tools.internal.messagehandling.MessageIDs;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.dnd.DropTargetListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchCommandConstants;
/**
* Editor for ExecTestCases
*
* @author BREDEX GmbH
* @created 05.09.2005
*/
public class TestSuiteEditor extends AbstractTestCaseEditor {
/** {@inheritDoc} */
public void createPartControlImpl(Composite parent) {
super.createPartControlImpl(parent);
addDoubleClickListener(CommandIDs.OPEN_SPECIFICATION_COMMAND_ID,
getMainTreeViewer());
if (!Plugin.getDefault().anyDirtyStar()) {
checkAndRemoveUnusedTestData();
}
}
/**
* Sets the input of the tree viewer for specification.
*/
public void setInitialInput() {
getMainTreeViewer().setContentProvider(
new TestSuiteEditorContentProvider());
ITestSuitePO rootPO =
(ITestSuitePO)getEditorHelper().getEditSupport().getWorkVersion();
try {
getTreeViewer().getTree().setRedraw(false);
getTreeViewer().setInput(new ITestSuitePO[] {rootPO});
} finally {
getTreeViewer().getTree().setRedraw(true);
getMainTreeViewer().expandAll();
getMainTreeViewer().setSelection(new StructuredSelection(rootPO));
}
runLocalChecks();
}
/**
* Checks, if all fields were filled in correctly.
* @return True, if all fields were filled in correctly.
*/
protected boolean checkCompleteness() {
ITestSuitePO tsWorkVersion =
(ITestSuitePO)getEditorHelper().getEditSupport().getWorkVersion();
if (tsWorkVersion.getName() == null
|| StringConstants.EMPTY.equals(tsWorkVersion.getName())) {
ErrorHandlingUtil.createMessageDialog(
MessageIDs.E_CANNOT_SAVE_EDITOR, null,
new String[]{Messages.TestCaseEditorNoTsuiteName});
return false;
}
if (tsWorkVersion.getName().startsWith(BLANK)
|| tsWorkVersion.getName().endsWith(BLANK)) {
ErrorHandlingUtil.createMessageDialog(
MessageIDs.E_CANNOT_SAVE_EDITOR, null,
new String[]{Messages.TestCaseEditorWrongTsName});
return false;
}
final IProjectPO project = GeneralStorage.getInstance().
getProject();
if (!tsWorkVersion.getName().equals(
getEditorHelper().getEditSupport().getOriginal().getName())
&& ProjectPM.doesTestSuiteExists(project.getId(),
tsWorkVersion.getName())) {
ErrorHandlingUtil.createMessageDialog(
MessageIDs.E_CANNOT_SAVE_EDITOR, null,
new String[]{Messages.TestCaseEditorDoubleTsuiteName});
return false;
}
if (tsWorkVersion.getStepDelay() == -1) { // empty step delay
ErrorHandlingUtil.createMessageDialog(
MessageIDs.E_CANNOT_SAVE_EDITOR, null,
new String[]{Messages.TestSuiteEditorEmptyStepDelay});
return false;
}
Iterator iter = tsWorkVersion.getNodeListIterator();
while (iter.hasNext()) {
INodePO child = (INodePO)iter.next();
if (child instanceof IExecTestCasePO) {
IExecTestCasePO execTC = (IExecTestCasePO)child;
if (!checkExecTCCompleteness(execTC)) {
return false;
}
}
}
return true;
}
/**
* Checks, if all fields were filled in correctly.
* @return True, if all fields were filled in correctly.
* @param testCase the checked testCase.
*/
private boolean checkExecTCCompleteness(IExecTestCasePO testCase) {
Object[] tcName = new Object[]{testCase.getName()};
String name = testCase.getName();
if (name == null || StringConstants.EMPTY.equals(name)) {
ErrorHandlingUtil.createMessageDialog(
MessageIDs.E_CANNOT_SAVE_EDITOR_TC_EX,
tcName, new String[]{Messages.TestCaseEditorNoExecTcName});
return false;
}
if (testCase.getName().startsWith(BLANK)
|| testCase.getName().endsWith(BLANK)) {
ErrorHandlingUtil.createMessageDialog(
MessageIDs.E_CANNOT_SAVE_EDITOR_TC_EX,
tcName, new String[]{
Messages.TestCaseEditorWrongExecTcName});
return false;
}
for (ICompNamesPairPO compNamesPair : testCase.getCompNamesPairs()) {
if (compNamesPair.getSecondName().equals(
StringConstants.EMPTY)) {
ErrorHandlingUtil.createMessageDialog(
MessageIDs.E_CANNOT_SAVE_EDITOR_TC_EX,
tcName, new String[]{
NLS.bind(Messages.TestCaseEditorCompNameError,
compNamesPair.getFirstName())
+ Messages.TestCaseEditorEmptyCompName});
return false;
}
if (compNamesPair.getSecondName().startsWith(BLANK)
|| compNamesPair.getSecondName().endsWith(BLANK)) {
ErrorHandlingUtil.createMessageDialog(
MessageIDs.E_CANNOT_SAVE_EDITOR_TC_EX,
tcName, new String[]{NLS.bind(
Messages.TestCaseEditorCompNameError,
compNamesPair.getFirstName())
+ Messages.TestCaseEditorWrongCompName});
return false;
}
}
return true;
}
/**
* {@inheritDoc}
*/
public String getEditorPrefix() {
return Messages.PluginTS;
}
/**
* {@inheritDoc}
*/
protected void fillContextMenu(IMenuManager mgr) {
IStructuredSelection selection = getStructuredSelection();
if (selection.getFirstElement() == null) {
return;
}
MenuManager submenuAdd = new MenuManager(Messages.TestSuiteBrowserAdd,
ADD_ID);
CommandHelper.createContributionPushItem(mgr,
RCPCommandIDs.REFERENCE_TC);
mgr.add(submenuAdd);
CommandHelper.createContributionPushItem(submenuAdd,
RCPCommandIDs.NEW_CONDITIONAL_STATEMENT);
CommandHelper.createContributionPushItem(submenuAdd,
RCPCommandIDs.NEW_WHILE_DO);
CommandHelper.createContributionPushItem(submenuAdd,
RCPCommandIDs.NEW_DO_WHILE);
CommandHelper.createContributionPushItem(submenuAdd,
RCPCommandIDs.NEW_ITERATE_LOOP);
CommandHelper.createContributionPushItem(mgr,
IWorkbenchCommandConstants.EDIT_COPY);
CommandHelper.createContributionPushItem(mgr,
IWorkbenchCommandConstants.EDIT_PASTE);
CommandHelper.createContributionPushItem(mgr,
RCPCommandIDs.TOGGLE_ACTIVE_STATE);
mgr.add(new Separator());
mgr.add(new GroupMarker("editing")); //$NON-NLS-1$
CommandHelper.createContributionPushItem(mgr,
RCPCommandIDs.REVERT_CHANGES);
mgr.add(new Separator());
MenuManager submenuRefactor = new MenuManager(
Messages.TestCaseEditorRefactor, REFACTOR_ID);
mgr.add(submenuRefactor);
CommandHelper.createContributionPushItem(submenuRefactor,
RCPCommandIDs.EXTRACT_TESTCASE);
CommandHelper.createContributionPushItem(submenuRefactor,
RCPCommandIDs.REPLACE_WITH_TESTCASE);
CommandHelper.createContributionPushItem(submenuRefactor,
RCPCommandIDs.SAVE_AS_NEW);
mgr.add(new Separator());
CommandHelper.createContributionPushItem(mgr,
CommandIDs.DELETE_COMMAND_ID);
CommandHelper.createContributionPushItem(mgr,
CommandIDs.OPEN_SPECIFICATION_COMMAND_ID);
CommandHelper.createContributionPushItem(mgr,
CommandIDs.SHOW_SPECIFICATION_COMMAND_ID);
CommandHelper.createContributionPushItem(mgr,
RCPCommandIDs.SHOW_WHERE_USED);
collapseExpandItems(mgr);
mgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
mgr.add(new Separator());
CommandHelper.createContributionPushItem(mgr,
RCPCommandIDs.NEW_COMMENT);
CommandHelper.createContributionPushItem(mgr,
RCPCommandIDs.EDIT_COMMENT);
}
/**
* {@inheritDoc}
*/
public Image getDisabledTitleImage() {
return IconConstants.DISABLED_TS_EDITOR_IMAGE;
}
/**
* Sets the help to the HelpSystem.
* @param parent the parent composite to set the help id to
*/
protected void setHelp(Composite parent) {
Plugin.getHelpSystem().setHelp(parent,
ContextHelpIds.TEST_SUITE_EDITOR);
}
/**
* {@inheritDoc}
*/
protected DropTargetListener getViewerDropAdapter() {
return new TSEditorDropTargetListener(this);
}
/** {@inheritDoc} */
public Image getIcon() {
return IconConstants.TS_EDITOR_IMAGE;
}
}