/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.gui.workflow.editor.commands;
import org.eclipse.gef.commands.Command;
import org.eclipse.jface.dialogs.IInputValidator;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.widgets.Display;
import de.rcenvironment.core.component.workflow.model.api.WorkflowDescription;
import de.rcenvironment.core.component.workflow.model.api.WorkflowNode;
/**
* Command that changes the name of a WorkflowNode.
*
* @author Heinrich Wendel
*/
public class WorkflowNodeRenameCommand extends Command {
/** The new WorkflowNode. */
private WorkflowNode node;
private WorkflowDescription wDesc;
/** The new name. */
private String name;
/** The old name. */
private String oldName;
/**
* Constructor.
*
* @param node The WorkflowNode to change the name of.
*/
public WorkflowNodeRenameCommand(WorkflowNode node, WorkflowDescription wDesc) {
this.node = node;
this.wDesc = wDesc;
}
@Override
public void execute() {
oldName = node.getName();
InputDialog dlg = new InputDialog(Display.getCurrent().getActiveShell(), Messages.name,
Messages.enterName, oldName, new IInputValidator() {
@Override
public String isValid(String newText) {
if (!oldName.equalsIgnoreCase(newText)) {
for (WorkflowNode n : wDesc.getWorkflowNodes()) {
if (n.getName().equalsIgnoreCase(newText)) {
return Messages.renameAlreadyExistsError;
} else if (newText.isEmpty()) {
return Messages.renameEmptyNameError;
}
}
}
return null;
}
});
if (dlg.open() == Window.CANCEL) {
return;
}
name = dlg.getValue();
redo();
}
@Override
public void redo() {
node.setName(name);
}
@Override
public void undo() {
node.setName(oldName);
}
}