/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.gui.workflow.editor.commands.endpoint; import java.util.Map; import de.rcenvironment.core.component.model.endpoint.api.EndpointDescriptionsManager; import de.rcenvironment.core.datamodel.api.DataType; 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} adding dynamic endpoints to a <code>WorkflowNode</code>. * * @author Christian Weiss * @author Sascha Zur */ public class AddDynamicEndpointCommand extends WorkflowNodeCommand { protected EndpointDescriptionsManager endpointDescManager; protected String id; protected String name; protected DataType type; protected Map<String, String> metaData; protected Refreshable[] refreshable; private boolean executable = true; private boolean undoable = false; private EndpointType direction; /** * Constructor. * * @param direction * @param name * @param type * @param executable * @param undoable */ public AddDynamicEndpointCommand(EndpointType direction, String id, String name, DataType type, Map<String, String> metaData, Refreshable... refreshable) { super(); this.name = name; this.id = id; this.type = type; this.metaData = metaData; this.direction = direction; this.refreshable = refreshable; } @Override public void initialize() { } @Override public boolean canExecute() { return executable; } @Override public void execute() { if (direction == EndpointType.INPUT) { endpointDescManager = getProperties().getInputDescriptionsManager(); } else { endpointDescManager = getProperties().getOutputDescriptionsManager(); } if (executable) { endpointDescManager.addDynamicEndpointDescription(id, name, type, metaData); 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) { endpointDescManager = getProperties().getInputDescriptionsManager(); } else { endpointDescManager = getProperties().getOutputDescriptionsManager(); } if (undoable) { endpointDescManager.removeDynamicEndpointDescription(name); executable = true; undoable = false; } if (refreshable != null) { for (Refreshable r : refreshable) { r.refresh(); } } } }