/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.components.parametricstudy.execution.validator;
import java.util.ArrayList;
import java.util.List;
import de.rcenvironment.components.parametricstudy.common.ParametricStudyComponentConstants;
import de.rcenvironment.core.component.api.LoopComponentConstants;
import de.rcenvironment.core.component.model.api.ComponentDescription;
import de.rcenvironment.core.component.model.endpoint.api.EndpointDescription;
import de.rcenvironment.core.component.validation.api.ComponentValidationMessage;
import de.rcenvironment.core.component.validation.api.ComponentValidationMessage.Type;
import de.rcenvironment.core.component.validation.spi.AbstractLoopComponentValidator;
/**
*
* Validator for Parametric Study Component.
*
* @author Jascha Riedel
*/
public class ParametricStudyComponentValidator extends AbstractLoopComponentValidator {
@Override
public String getIdentifier() {
return ParametricStudyComponentConstants.COMPONENT_ID;
}
@Override
protected List<ComponentValidationMessage> validateLoopComponentSpecific(
ComponentDescription componentDescription) {
List<ComponentValidationMessage> messages = new ArrayList<>();
getNestedLoopErrors(componentDescription, messages);
return messages;
}
@Override
protected List<ComponentValidationMessage> validateOnWorkflowStartComponentSpecific(
ComponentDescription componentDescription) {
return null;
}
private void getNestedLoopErrors(ComponentDescription componentDescription,
List<ComponentValidationMessage> messages) {
if (Boolean.valueOf(getProperty(componentDescription, LoopComponentConstants.CONFIG_KEY_IS_NESTED_LOOP))) {
Boolean hasFlowControllingInput = false;
for (EndpointDescription inputDesc : getInputs(componentDescription)) {
if (inputDesc.getDynamicEndpointIdentifier().equals(LoopComponentConstants.ENDPOINT_ID_TO_FORWARD)
|| inputDesc.getDynamicEndpointIdentifier()
.equals(ParametricStudyComponentConstants.DYNAMIC_INPUT_IDENTIFIER)) {
hasFlowControllingInput = true;
break;
}
}
if (!hasFlowControllingInput) {
messages.add(new ComponentValidationMessage(Type.ERROR, null,
"In a nested loop the parametric study must have a controlling "
+ "input (i. e. 'forwarding' or 'evaluation result' input).",
null));
}
}
}
}