/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.gui.workflow.editor.commands;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.gef.commands.Command;
import de.rcenvironment.core.component.workflow.model.api.Connection;
import de.rcenvironment.core.component.workflow.model.api.WorkflowDescription;
import de.rcenvironment.core.component.workflow.model.api.WorkflowNode;
import de.rcenvironment.core.gui.workflow.editor.connections.ConnectionDialogController;
/**
* Command to draw or remove connections.
*
* @author Oliver Seebach
*
*/
public class ConnectionDrawCommand extends Command {
private final Log logger = LogFactory.getLog(getClass());
private WorkflowNode sourceNode;
private WorkflowNode targetNode;
private WorkflowDescription memorizedModel;
private WorkflowDescription currentModel;
private WorkflowDescription modifiedModel;
public ConnectionDrawCommand(WorkflowDescription model, WorkflowNode sourceNode) {
memorizedModel = model.clone();
this.currentModel = model;
this.sourceNode = sourceNode;
}
@Override
public void execute() {
WorkflowDescription modelClone = currentModel.clone();
ConnectionDialogController dialogControler = new ConnectionDialogController(
modelClone, sourceNode, targetNode, false);
if (sourceNode != null && targetNode != null) {
if (dialogControler.open() == 0) {
modifiedModel = dialogControler.getWorkflowDescription();
List<Connection> originalConnections = currentModel.getConnections();
List<Connection> modifiedConnections = modifiedModel.getConnections();
if (!CollectionUtils.isEqualCollection(originalConnections, modifiedConnections)){
currentModel.replaceConnections(modifiedConnections);
}
}
}
}
@Override
public void undo() {
currentModel.replaceConnections(memorizedModel.getConnections());
}
@Override
public void redo() {
if (currentModel != null && modifiedModel != null){
currentModel.replaceConnections(modifiedModel.getConnections());
} else {
logger.warn("Redo of connections did not finish successfully.");
}
}
/**
* Sets the target node.
*
* @param target The target node.
*/
public void setTarget(WorkflowNode target) {
this.targetNode = target;
}
}