/* * Copyright 2016 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 static com.google.common.collect.Sets.newHashSet; import java.io.File; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.Path; import org.rf.ide.core.testdata.model.table.setting.ResourceImport; import org.rf.ide.core.testdata.text.read.recognizer.RobotToken; import org.robotframework.ide.eclipse.main.plugin.model.RobotSuiteFile; import org.robotframework.ide.eclipse.main.plugin.project.ASuiteFileDescriber; 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 org.robotframework.ide.eclipse.main.plugin.project.build.causes.IProblemCause; class GeneralSettingsResourcesImportValidator extends GeneralSettingsImportsValidator { GeneralSettingsResourcesImportValidator(final FileValidationContext validationContext, final RobotSuiteFile suiteFile, final List<ResourceImport> imports, final ProblemsReportingStrategy reporter) { super(validationContext, suiteFile, imports, reporter); } @Override protected IProblemCause getCauseForMissingImportArguments() { return GeneralSettingsProblem.MISSING_RESOURCE_NAME; } @Override protected IProblemCause getCauseForNonExistingImport() { return GeneralSettingsProblem.NON_EXISTING_RESOURCE_IMPORT; } @Override protected boolean isPathImport(final String pathOrName) { return true; } @Override protected void validateResource(final IResource resource, final String path, final RobotToken pathToken, final List<RobotToken> arguments) { if (resource.getType() != IResource.FILE) { reporter.handleProblem(RobotProblem.causedBy(GeneralSettingsProblem.INVALID_RESOURCE_IMPORT) .formatMessageWith(path, ": given location does not point to a file"), validationContext.getFile(), pathToken); } else if (!ASuiteFileDescriber.isResourceFile((IFile) resource)) { if ("html".equalsIgnoreCase(resource.getFileExtension())) { reporter.handleProblem(RobotProblem.causedBy(GeneralSettingsProblem.HTML_RESOURCE_IMPORT), validationContext.getFile(), pathToken); } else { reporter.handleProblem(RobotProblem.causedBy(GeneralSettingsProblem.INVALID_RESOURCE_IMPORT) .formatMessageWith(path, ": given file is not a Resource file"), validationContext.getFile(), pathToken); } } } @Override protected void validateFile(final File file, final String path, final RobotToken pathToken, final List<RobotToken> arguments) { if (!file.isFile()) { reporter.handleProblem(RobotProblem.causedBy(GeneralSettingsProblem.INVALID_RESOURCE_IMPORT) .formatMessageWith(path, ": given location does not point to a file"), validationContext.getFile(), pathToken); } else { final String fileExtension = new Path(file.getAbsolutePath()).getFileExtension(); final String extension = fileExtension == null ? null : fileExtension.toLowerCase(); if ("html".equals(extension)) { reporter.handleProblem(RobotProblem.causedBy(GeneralSettingsProblem.HTML_RESOURCE_IMPORT), validationContext.getFile(), pathToken); } else if (!newHashSet("txt", "tsv", "robot").contains(extension)) { reporter.handleProblem(RobotProblem.causedBy(GeneralSettingsProblem.INVALID_RESOURCE_IMPORT) .formatMessageWith(path, ": given file is not a Resource file"), validationContext.getFile(), pathToken); } } } }