/* * 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.search.participants; import java.util.Set; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; import org.robotframework.ide.eclipse.main.plugin.model.RobotModel; import org.robotframework.ide.eclipse.main.plugin.model.RobotSuiteFile; import org.robotframework.ide.eclipse.main.plugin.project.library.KeywordSpecification; import org.robotframework.ide.eclipse.main.plugin.project.library.LibrarySpecification; import org.robotframework.ide.eclipse.main.plugin.search.SearchPattern; import org.robotframework.ide.eclipse.main.plugin.search.SearchResult; import com.google.common.collect.Multimap; /** * @author Michal Anglart * */ public abstract class TargetedSearch { private final RobotModel model; protected final SearchResult result; protected final SearchPattern searchPattern; TargetedSearch(final SearchPattern searchPattern, final RobotModel model, final SearchResult result) { this.searchPattern = searchPattern; this.model = model; this.result = result; } public final void run(final IProgressMonitor monitor, final Multimap<IProject, LibrarySpecification> libraries, final Set<IFile> files) throws OperationCanceledException { monitor.beginTask("Searching for '" + searchPattern.getPattern() + "'", libraries.values().size() + files.size()); for (final IProject project : libraries.keySet()) { for (final LibrarySpecification librarySpecification : libraries.get(project)) { if (monitor.isCanceled()) { throw new OperationCanceledException(); } monitor.subTask("locating matches in " + librarySpecification.getName() + " library used by '" + project.getName() + "' project"); locateMatchesInLibrarySpecification(project, librarySpecification); for (final KeywordSpecification keywordSpecification : librarySpecification.getKeywords()) { locateMatchesInKeywordSpecification(project, librarySpecification, keywordSpecification); } monitor.worked(1); } } for (final IFile file : files) { if (monitor.isCanceled()) { throw new OperationCanceledException(); } locateMatchesInRobotFile(model.createSuiteFile(file)); monitor.worked(1); } } protected abstract void locateMatchesInLibrarySpecification(final IProject project, final LibrarySpecification librarySpecification); protected abstract void locateMatchesInKeywordSpecification(final IProject project, final LibrarySpecification librarySpecification, final KeywordSpecification keywordSpecification); protected abstract void locateMatchesInRobotFile(final RobotSuiteFile robotSuiteFile); }