/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.components.converger.execution.validator;
import java.util.ArrayList;
import java.util.List;
import de.rcenvironment.components.converger.common.ConvergerComponentConstants;
import de.rcenvironment.components.converger.execution.Messages;
import de.rcenvironment.core.component.model.api.ComponentDescription;
import de.rcenvironment.core.component.validation.api.ComponentValidationMessage;
import de.rcenvironment.core.component.validation.spi.AbstractLoopComponentValidator;
import de.rcenvironment.core.utils.common.StringUtils;
/**
* Validator for converger component.
*
* @author Sascha Zur
* @author Jascha Riedel
*/
public class ConvergerComponentValidator extends AbstractLoopComponentValidator {
@Override
public String getIdentifier() {
return ConvergerComponentConstants.COMPONENT_ID;
}
@Override
protected List<ComponentValidationMessage> validateLoopComponentSpecific(
ComponentDescription componentDescription) {
List<ComponentValidationMessage> messages = new ArrayList<>();
final boolean hasInputs = hasInputs(componentDescription);
if (!hasInputs) {
final ComponentValidationMessage noInputMessage = new ComponentValidationMessage(
ComponentValidationMessage.Type.WARNING, "", Messages.noInput, Messages.noInput);
messages.add(noInputMessage);
}
checkIfDefined(componentDescription, ConvergerComponentConstants.KEY_EPS_A, messages);
checkIfDefined(componentDescription, ConvergerComponentConstants.KEY_EPS_R, messages);
checkIfDefined(componentDescription, ConvergerComponentConstants.KEY_ITERATIONS_TO_CONSIDER, messages);
return messages;
}
@Override
protected List<ComponentValidationMessage> validateOnWorkflowStartComponentSpecific(
ComponentDescription componentDescription) {
return null;
}
private void checkIfDefined(ComponentDescription componentDescription, String key,
List<ComponentValidationMessage> messages) {
String prop = getProperty(componentDescription, key);
if (prop == null || prop.isEmpty()) {
String text = StringUtils.format("'%s' is not defined", getPropertyDisplayName(key));
messages.add(new ComponentValidationMessage(ComponentValidationMessage.Type.ERROR, key, text, text));
}
}
private String getPropertyDisplayName(String key) {
if (key.equals(ConvergerComponentConstants.KEY_EPS_A)) {
return "Absolute convergence";
} else if (key.equals(ConvergerComponentConstants.KEY_EPS_R)) {
return "Relative convergence";
} else if (key.equals(ConvergerComponentConstants.KEY_ITERATIONS_TO_CONSIDER)) {
return "Iterations to consider";
} else {
return "";
}
}
}