/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.component.workflow.model.api;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import de.rcenvironment.core.component.model.api.ComponentDescription;
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.spi.ComponentInstanceProperties;
import de.rcenvironment.core.datamodel.api.DataType;
/**
* Utility functions to access {@link WorkflowNode}s.
*
* @author Christian Weiss
*/
public final class WorkflowNodeUtil {
private WorkflowNodeUtil() {}
/**
* Returns, whether the specified {@link WorkflowNode} has inputs.
*
* @param workflowNode the {@link WorkflowNode}
* @return true, the specified {@link WorkflowNode} has inputs
*/
public static boolean hasInputs(final WorkflowNode workflowNode) {
final ComponentDescription compDescription = workflowNode.getComponentDescription();
return !compDescription.getInputDescriptionsManager().getEndpointDescriptions().isEmpty();
}
/**
* Returns, whether the specified {@link WorkflowNode} has outputs.
*
* @param workflowNode the {@link WorkflowNode}
* @return true, if the specified {@link WorkflowNode} has outputs
*/
public static boolean hasOutputs(final WorkflowNode workflowNode) {
final ComponentDescription compDescription = workflowNode.getComponentDescription();
return !compDescription.getOutputDescriptionsManager().getEndpointDescriptions().isEmpty();
}
/**
* Returns, whether the specified {@link WorkflowNode} has inputs of the specified type.
*
* @param workflowNode the {@link WorkflowNode}
* @param type the desired type of inputs
* @return true, if the specified {@link WorkflowNode} has inputs of the specified type
*/
public static boolean hasInputs(WorkflowNode workflowNode, DataType type) {
return !getInputsByDataType(workflowNode, type).isEmpty();
}
/**
* Returns, whether the specified {@link WorkflowNode} has outputs of the specified type.
*
* @param workflowNode the {@link WorkflowNode}
* @param type the desired type of outputs
* @return true, if the specified {@link WorkflowNode} has outputs of the specified type
*/
public static boolean hasOutputs(WorkflowNode workflowNode, DataType type) {
return !getOutputs(workflowNode, type).isEmpty();
}
/**
* Returns all inputs of the specified {@link WorkflowNode}.
*
* @param workflowNode the {@link WorkflowNode}
* @return all inputs of the specified {@link WorkflowNode}
*/
public static Set<EndpointDescription> getInputs(final WorkflowNode workflowNode) {
return Collections.unmodifiableSet(workflowNode.getComponentDescription().getInputDescriptionsManager().getEndpointDescriptions());
}
/**
* Returns the inputs of the specified {@link WorkflowNode} having the specified type.
*
* @param workflowNode the {@link WorkflowNode}
* @param type the desired type of inputs
* @return the inputs of the specified {@link WorkflowNode} having the specified type
*/
public static Set<EndpointDescription> getInputsByDataType(WorkflowNode workflowNode, DataType type) {
return getEndpointsByDataType(workflowNode.getInputDescriptionsManager(), type);
}
/**
* Returns all outputs of the specified {@link WorkflowNode}.
*
* @param workflowNode the {@link WorkflowNode}
* @return all outputs of the specified {@link WorkflowNode}
*/
public static Set<EndpointDescription> getOutputs(WorkflowNode workflowNode) {
return Collections.unmodifiableSet(workflowNode.getComponentDescription().getOutputDescriptionsManager().getEndpointDescriptions());
}
/**
* Returns the outputs of the specified {@link WorkflowNode} having the specified type.
*
* @param workflowNode the {@link WorkflowNode}
* @param type the desired type of outputs
* @return the outputs of the specified {@link WorkflowNode} having the specified type
*/
public static Set<EndpointDescription> getOutputs(WorkflowNode workflowNode, DataType type) {
return getEndpointsByDataType(workflowNode.getOutputDescriptionsManager(), type);
}
private static Set<EndpointDescription> getEndpointsByDataType(EndpointDescriptionsManager endpointManager, final DataType type) {
Set<EndpointDescription> result = new HashSet<EndpointDescription>();
for (final EndpointDescription endpointDesc : endpointManager.getEndpointDescriptions()) {
if (type == endpointDesc.getDataType()) {
result.add(endpointDesc);
}
}
return Collections.unmodifiableSet(result);
}
/**
* Returns, whether the specified {@link WorkflowNode} has a property with the specified key.
*
* @param workflowNode the {@link WorkflowNode}
* @param key the key of the property
* @return the type of the property
*/
public static boolean hasConfigurationValue(final WorkflowNode workflowNode, final String key) {
return workflowNode.getConfigurationDescription()
.getComponentConfigurationDefinition().getConfigurationKeys().contains(key);
}
/**
* Returns, whether the specified property of the specified
* {@link ReadableComponentInstanceConfiguration} is set.
*
* @param workflowNode the {@link ReadableComponentInstanceConfiguration}
* @param key the key of the property
* @return true, if the property is set
*/
public static boolean isConfigurationValueSet(final ComponentInstanceProperties workflowNode, final String key) {
final boolean result = getConfigurationValue(workflowNode, key) != null;
return result;
}
/**
* Returns the value of the specified property of the specified
* {@link ReadableComponentInstanceConfiguration}.
*
* @param workflowNode the {@link ReadableComponentInstanceConfiguration}
* @param key the key of the property
* @return the value of the property
*/
public static String getConfigurationValue(final ComponentInstanceProperties workflowNode, final String key) {
return workflowNode.getConfigurationDescription().getConfigurationValue(key);
}
}