/* * 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.EndpointDescription; import de.rcenvironment.core.component.model.endpoint.api.EndpointDescriptionsManager; import de.rcenvironment.core.datamodel.api.DataType; import de.rcenvironment.core.gui.workflow.editor.properties.Refreshable; import de.rcenvironment.core.gui.workflow.editor.properties.WorkflowNodeCommand; /** * {@link WorkflowNodeCommand} * Edit a dynamic output endpoint in a <code>WorkflowNode</code>. * * @author Caslav Ilic */ public class EditDynamicOutputCommand extends WorkflowNodeCommand { protected String endpointId; protected String oldName; protected String newName; protected DataType newType; protected Map<String, String> newMetaData; protected String newGroup; protected Refreshable[] refreshable; private EndpointDescription oldDesc = null; private boolean executable = true; private boolean undoable = false; public EditDynamicOutputCommand(String endpointId, String oldName, String newName, DataType newType, Map<String, String> newMetaData, String newGroup, Refreshable... refreshable) { super(); this.endpointId = endpointId; this.oldName = oldName; this.newName = newName; this.newType = newType; this.newMetaData = newMetaData; this.newGroup = newGroup; this.refreshable = refreshable; } public EditDynamicOutputCommand(String endpointId, String oldName, String newName, DataType newType, Map<String, String> newMetaData, Refreshable... refreshable) { this(endpointId, oldName, newName, newType, newMetaData, null, refreshable); } @Override public void initialize() { // do nothing } @Override public boolean canExecute() { return executable; } @Override public void execute() { if (executable) { EndpointDescriptionsManager outputManager = getProperties().getOutputDescriptionsManager(); oldDesc = getProperties().getOutputDescriptionsManager().getEndpointDescription(oldName); DataType type = newType; if (newType == null) { type = oldDesc.getDataType(); } Map<String, String> metaData = newMetaData; if (metaData == null) { metaData = oldDesc.getMetaData(); } String group = newGroup; if (group == null) { group = oldDesc.getParentGroupName(); } outputManager.editDynamicEndpointDescription(oldName, newName, type, metaData, endpointId, group); executable = false; undoable = true; } if (refreshable != null) { for (Refreshable r : refreshable) { r.refresh(); } } } @Override public boolean canUndo() { return undoable; } @Override public void undo() { if (undoable) { EndpointDescriptionsManager outputManager = getProperties().getOutputDescriptionsManager(); outputManager.editDynamicEndpointDescription(newName, oldName, oldDesc.getDataType(), oldDesc.getMetaData(), oldDesc.getDynamicEndpointIdentifier(), oldDesc.getParentGroupName()); executable = true; undoable = false; } if (refreshable != null) { for (Refreshable r : refreshable) { r.refresh(); } } } }