/*******************************************************************************
* 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.handlers;
import java.util.List;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.window.Window;
import org.eclipse.jubula.client.core.businessprocess.ParameterInterfaceBP;
import org.eclipse.jubula.client.core.events.DataEventDispatcher;
import org.eclipse.jubula.client.core.events.DataEventDispatcher.DataState;
import org.eclipse.jubula.client.core.events.DataEventDispatcher.UpdateState;
import org.eclipse.jubula.client.core.model.IPersistentObject;
import org.eclipse.jubula.client.core.model.ITestDataCubePO;
import org.eclipse.jubula.client.ui.rcp.controllers.IEditorOperation;
import org.eclipse.jubula.client.ui.rcp.dialogs.AbstractEditParametersDialog;
import org.eclipse.jubula.client.ui.rcp.dialogs.AbstractEditParametersDialog.Parameter;
import org.eclipse.jubula.client.ui.rcp.dialogs.EditParametersTDMDialog;
import org.eclipse.jubula.client.ui.rcp.editors.IJBEditor;
import org.eclipse.jubula.client.ui.utils.DialogUtils;
import org.eclipse.ui.handlers.HandlerUtil;
/**
* @author BREDEX GmbH
* @created Jul 14, 2010
*/
public class EditTDMParametersHandler extends AbstractEditParametersHandler {
/**
* @param event
* An event containing all the information about the current
* state of the application; must not be <code>null</code>.
* @return the currently selected TestDataCube, or <code>null</code> if
* no TestDataCube is currently selected.
*/
protected final ITestDataCubePO getSelectedTestDataManager(
ExecutionEvent event) {
ISelection selection = HandlerUtil.getCurrentSelection(event);
if (selection instanceof IStructuredSelection) {
IStructuredSelection structuredSelection =
(IStructuredSelection)selection;
Object selectedObject = structuredSelection.getFirstElement();
if (selectedObject instanceof ITestDataCubePO) {
return (ITestDataCubePO)selectedObject;
}
}
return null;
}
/** {@inheritDoc} */
public Object executeImpl(ExecutionEvent event) {
final ITestDataCubePO tdc = getSelectedTestDataManager(event);
if (tdc != null) {
final IJBEditor editor = getEditor(event);
editor.getEditorHelper().doEditorOperation(new IEditorOperation() {
public void run(IPersistentObject workingPo) {
final AbstractEditParametersDialog dialog =
new EditParametersTDMDialog(getActiveShell(), tdc);
dialog.create();
DialogUtils.setWidgetNameForModalDialog(dialog);
if (dialog.open() == Window.OK) {
performChanges(editor, tdc, dialog);
}
}
});
}
return null;
}
/**
* @param editor
* the current editor
* @param tdc
* the test data cube to perform the changes on
* @param dialog
* the edit parameters dialog
*/
private void performChanges(IJBEditor editor, ITestDataCubePO tdc,
AbstractEditParametersDialog dialog) {
final List<Parameter> parameters = dialog.getParameters();
boolean isModified = editParameters(tdc, parameters, editor
.getEditorHelper().getEditSupport().getParamMapper(),
new ParameterInterfaceBP());
if (isModified) {
editor.getEditorHelper().setDirty(true);
DataEventDispatcher ded = DataEventDispatcher.getInstance();
ded.fireParamChangedListener();
ded.firePropertyChanged(false);
ded.fireDataChangedListener(tdc,
DataState.StructureModified, UpdateState.onlyInEditor);
}
}
}