/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.gui.workflow.editor.commands.endpoint; import de.rcenvironment.core.component.model.endpoint.api.EndpointDescription; import de.rcenvironment.core.component.model.endpoint.api.EndpointDescriptionsManager; import de.rcenvironment.core.datamodel.api.EndpointType; import de.rcenvironment.core.gui.workflow.editor.properties.Refreshable; import de.rcenvironment.core.gui.workflow.editor.properties.WorkflowNodeCommand; /** * {@link WorkflowNodeCommand} editing dynamic endpoints in a <code>WorkflowNode</code>. * * @author Christian Weiss * @author Sascha Zur */ public class EditDynamicEndpointCommand extends WorkflowNodeCommand { protected final EndpointType direction; protected EndpointDescription oldDesc; protected EndpointDescription newDesc; protected Refreshable[] refreshable; private boolean executable = true; private boolean undoable = false; private EndpointDescriptionsManager manager; /** * The constructor. * * @param direction of the endpoint * @param oldDescription to be replaced * @param newDescription to replace */ public EditDynamicEndpointCommand(final EndpointType direction, final EndpointDescription oldDescription, final EndpointDescription newDescription, Refreshable... refreshable) { this.direction = direction; oldDesc = oldDescription; newDesc = newDescription; this.refreshable = refreshable; } @Override public void initialize() { } @Override public boolean canExecute() { return executable; } @Override public void execute() { if (direction == EndpointType.INPUT) { manager = getProperties().getInputDescriptionsManager(); } else { manager = getProperties().getOutputDescriptionsManager(); } if (executable) { if (manager.getEndpointDescription(oldDesc.getName()).getEndpointDefinition().isStatic()) { manager.editStaticEndpointDescription(oldDesc.getName(), newDesc.getDataType(), newDesc.getMetaData()); } else { manager.editDynamicEndpointDescription(oldDesc.getName(), newDesc.getName(), newDesc.getDataType(), newDesc.getMetaData(), newDesc.getDynamicEndpointIdentifier()); } executable = false; undoable = true; } if (refreshable != null) { for (Refreshable r : refreshable) { r.refresh(); } } } @Override public boolean canUndo() { return undoable; } @Override public void undo() { if (direction == EndpointType.INPUT) { manager = getProperties().getInputDescriptionsManager(); } else { manager = getProperties().getOutputDescriptionsManager(); } if (undoable) { if (manager.getEndpointDescription(newDesc.getName()).getEndpointDefinition().isStatic()) { manager.editStaticEndpointDescription(newDesc.getName(), oldDesc.getDataType(), oldDesc.getMetaData()); } else { manager.editDynamicEndpointDescription(newDesc.getName(), oldDesc.getName(), oldDesc.getDataType(), oldDesc.getMetaData(), oldDesc.getDynamicEndpointIdentifier()); } executable = true; undoable = false; } if (refreshable != null) { for (Refreshable r : refreshable) { r.refresh(); } } } }