/*
* Copyright 2015 Nokia Solutions and Networks
* Licensed under the Apache License, Version 2.0,
* see license.txt file for details.
*/
package org.robotframework.ide.eclipse.main.plugin.project.build.validation;
import java.util.Optional;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.rf.ide.core.testdata.model.AModelElement;
import org.rf.ide.core.testdata.model.table.SettingTable;
import org.rf.ide.core.testdata.model.table.setting.DefaultTags;
import org.rf.ide.core.testdata.model.table.setting.TestTemplate;
import org.rf.ide.core.validation.ProblemPosition;
import org.robotframework.ide.eclipse.main.plugin.model.RobotSettingsSection;
import org.robotframework.ide.eclipse.main.plugin.model.RobotSuiteFile;
import org.robotframework.ide.eclipse.main.plugin.project.build.ProblemsReportingStrategy;
import org.robotframework.ide.eclipse.main.plugin.project.build.RobotProblem;
import org.robotframework.ide.eclipse.main.plugin.project.build.causes.GeneralSettingsProblem;
import com.google.common.collect.Range;
public class RobotInitFileValidator extends RobotFileValidator {
public RobotInitFileValidator(final ValidationContext context, final IFile file,
final ProblemsReportingStrategy reporter) {
super(context, file, reporter);
}
@Override
public void validate(final RobotSuiteFile fileModel, final FileValidationContext validationContext)
throws CoreException {
super.validate(fileModel, validationContext);
final Optional<RobotSettingsSection> settingsSection = fileModel.findSection(RobotSettingsSection.class);
validateIfThereAreNoForbiddenSettings(settingsSection);
}
private void validateIfThereAreNoForbiddenSettings(final Optional<RobotSettingsSection> settingsSection) {
if (!settingsSection.isPresent()) {
return;
}
final SettingTable settingsTable = settingsSection.get().getLinkedElement();
for (final TestTemplate template : settingsTable.getTestTemplates()) {
reportProblem(template.getDeclaration().getText(), template);
}
for (final DefaultTags defaultTag : settingsTable.getDefaultTags()) {
reportProblem(defaultTag.getDeclaration().getText(), defaultTag);
}
}
private void reportProblem(final String declarationName, final AModelElement<?> element) {
final RobotProblem problem = RobotProblem.causedBy(GeneralSettingsProblem.UNSUPPORTED_SETTING)
.formatMessageWith(declarationName, "initialization");
final ProblemPosition position = new ProblemPosition(element.getBeginPosition().getLine(),
Range.closed(element.getBeginPosition().getOffset(), element.getEndPosition().getOffset()));
reporter.handleProblem(problem, file, position);
}
}