/* * 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.versiondependent.setting; import static com.google.common.collect.Lists.transform; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.rf.ide.core.testdata.model.AModelElement; import org.rf.ide.core.testdata.text.read.recognizer.RobotToken; import org.robotframework.ide.eclipse.main.plugin.model.RobotSettingsSection; 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.validation.versiondependent.VersionDependentModelUnitValidator; import com.google.common.base.Function; import com.google.common.base.Joiner; abstract class ADuplicatedInOldValidator<T extends AModelElement<?>> extends VersionDependentModelUnitValidator { private final IFile file; protected final RobotSettingsSection section; private final ProblemsReportingStrategy reporter; ADuplicatedInOldValidator(final IFile file, final RobotSettingsSection section, final ProblemsReportingStrategy reporter) { this.file = file; this.section = section; this.reporter = reporter; } @Override public void validate(final IProgressMonitor monitor) throws CoreException { final List<T> elems = getElements(); final String inUse = Joiner.on(' ').skipNulls().join(transform(elems, getImportantElement())); if (elems.size() > 1) { for (int i = 1; i < elems.size(); i++) { final RobotToken token = elems.get(i).getDeclaration(); reporter.handleProblem( RobotProblem.causedBy(getSettingProblemId()).formatMessageWith(token.getText(), inUse), file, token); } } } protected abstract List<T> getElements(); protected abstract Function<T, String> getImportantElement(); protected abstract GeneralSettingsProblem getSettingProblemId(); }