/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.gui.workflow;
import java.util.Collection;
import java.util.HashSet;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Display;
import de.rcenvironment.core.component.model.endpoint.api.EndpointDescription;
import de.rcenvironment.core.component.model.endpoint.api.EndpointDescriptionsManager;
import de.rcenvironment.core.component.workflow.model.api.WorkflowNode;
import de.rcenvironment.core.datamodel.api.DataType;
import de.rcenvironment.core.datamodel.api.EndpointType;
import de.rcenvironment.core.gui.workflow.EndpointContentProvider.Endpoint;
import de.rcenvironment.core.gui.workflow.editor.properties.Messages;
import de.rcenvironment.core.utils.common.StringUtils;
/**
* Class helping handling {@link Endpoint}s.
*
* @author Doreen Seider
* @author Sascha Zur
*/
public final class EndpointHandlingHelper {
private EndpointHandlingHelper() {}
/**
* Extracts {@link Endpoint}s for the given properties and returns them.
*
* @param workflowNode {@link WorkflowNode}.
* @param type Input oder output?
* @return {@link Endpoint}s.
*/
public static Collection<Endpoint> getEndpoints(WorkflowNode workflowNode, EndpointType type) {
Collection<EndpointContentProvider.Endpoint> endpoints = new HashSet<EndpointContentProvider.Endpoint>();
for (EndpointDescription endpointDesc : getEndpointDefinitions(workflowNode, type).getEndpointDescriptions()) {
endpoints.add(new Endpoint(workflowNode, endpointDesc));
}
return endpoints;
}
private static EndpointDescriptionsManager getEndpointDefinitions(WorkflowNode workflowNode, EndpointType type) {
if (type == EndpointType.INPUT) {
return workflowNode.getComponentDescription().getInputDescriptionsManager();
} else {
return workflowNode.getComponentDescription().getOutputDescriptionsManager();
}
}
/**
* Checks if data type of endpoint can be changed.
*
* @param endpointType input or output?
* @param oldDesc old endpoint
* @param newDataType target data type
* @return <code>true</code> if data type can be changed to target data type, otherwise
* <code>false</code>
*/
public static boolean editEndpointDataType(EndpointType endpointType, EndpointDescription oldDesc, DataType newDataType) {
if (oldDesc.getDataType() != newDataType && !oldDesc.isDataTypeValid(newDataType)) {
String source = Messages.input;
String target = Messages.output;
if (endpointType == EndpointType.OUTPUT) {
source = target;
target = Messages.input;
}
if (!MessageDialog.openConfirm(Display.getDefault().getActiveShell(),
Messages.invalidDataTypeDialogTitle,
StringUtils.format(Messages.invalidDataTypeDialogMessage,
source, oldDesc.getName(), target.toLowerCase(), oldDesc.getName(), oldDesc.getDataType(), newDataType))) {
return false;
}
}
return true;
}
}