/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.components.switchcmp.execution.validator; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import de.rcenvironment.components.switchcmp.common.ScriptValidation; import de.rcenvironment.components.switchcmp.common.SwitchComponentConstants; import de.rcenvironment.components.switchcmp.execution.Messages; 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.spi.AbstractComponentValidator; import de.rcenvironment.core.datamodel.api.DataType; /** * * Validator for switch component. * * @author David Scholz */ public class SwitchComponentValidator extends AbstractComponentValidator { @Override public String getIdentifier() { return SwitchComponentConstants.COMPONENT_ID; } @Override protected List<ComponentValidationMessage> validateComponentSpecific(ComponentDescription componentDescription) { final List<ComponentValidationMessage> messages = new ArrayList<>(); String condition = getProperty(componentDescription, SwitchComponentConstants.CONDITION_KEY); if (condition == null || condition.trim().isEmpty()) { // TODO : add messages final ComponentValidationMessage emptyCondition = new ComponentValidationMessage( ComponentValidationMessage.Type.ERROR, SwitchComponentConstants.CONDITION_KEY, Messages.noConditionString, Messages.noConditionString); messages.add(emptyCondition); } else { String errorMessage = ScriptValidation.validateScript(condition, getInputAndConnectionStatus(componentDescription), getInputsAndDataTypes(componentDescription), this); if (!errorMessage.isEmpty()) { final ComponentValidationMessage scriptError = new ComponentValidationMessage( ComponentValidationMessage.Type.ERROR, SwitchComponentConstants.CONDITION_KEY, errorMessage, errorMessage); messages.add(scriptError); } } return messages; } @Override protected List<ComponentValidationMessage> validateOnWorkflowStartComponentSpecific( ComponentDescription componentDescription) { // TODO Auto-generated method stub return null; } private Map<String, DataType> getInputsAndDataTypes(ComponentDescription componentDescription) { Map<String, DataType> inputs = new HashMap<>(); for (EndpointDescription description : getInputs(componentDescription)) { inputs.put(description.getName(), description.getDataType()); } return inputs; } private Map<String, Boolean> getInputAndConnectionStatus(ComponentDescription componentDescription) { Map<String, Boolean> inputs = new HashMap<>(); for (EndpointDescription description : getInputs(componentDescription)) { inputs.put(description.getName(), description.isConnected()); } return inputs; } }