package org.phoenicis.javafx.views.mainwindow.engines; import org.phoenicis.engines.dto.EngineCategoryDTO; import org.phoenicis.engines.dto.EngineSubCategoryDTO; import org.phoenicis.engines.dto.EngineVersionDTO; import java.nio.file.Files; import java.nio.file.Paths; import java.util.function.Predicate; /** * This class represents a filter used for filtering the engine versions for * <ul> * <li> * Installed engine versions * </li> * <li> * Not installed engine versions * </li> * <li> * Engine versions containing a search term * </li> * </ul> * This filter depends on a previously defines {@link EngineSubCategoryDTO}. * * @author marc * @since 23.04.17 */ public class EnginesFilter implements Predicate<EngineVersionDTO> { private EngineCategoryDTO engineCategory; private EngineSubCategoryDTO engineSubCategory; private String enginesPath; /** * The search term entered into the search field */ private String searchTerm = ""; /** * Are installed engines searched */ private boolean showInstalled = true; /** * Are not installed engines searched */ private boolean showNotInstalled = true; /** * Constructor * * @param engineSubCategory The engine sub category used for this filter * @param enginesPath The path to the installed engines */ public EnginesFilter(EngineCategoryDTO engineCategory, EngineSubCategoryDTO engineSubCategory, String enginesPath) { super(); this.engineCategory = engineCategory; this.engineSubCategory = engineSubCategory; this.enginesPath = enginesPath; } /** * This method checks if a given engine version has been installed * * @param engineVersionDTO The engine version to be checked * @return True if the engine version is installed, false otherwise */ private boolean isInstalled(EngineVersionDTO engineVersionDTO) { return Files.exists(Paths.get(enginesPath, engineCategory.getName().toLowerCase(), engineSubCategory.getName(), engineVersionDTO.getVersion())); } @Override public boolean test(EngineVersionDTO engineVersion) { return engineVersion.getVersion().toLowerCase().contains(searchTerm.toLowerCase()) && ((this.showInstalled && isInstalled(engineVersion)) || (this.showNotInstalled && !isInstalled(engineVersion))); } public void setSearchTerm(String searchTerm) { this.searchTerm = searchTerm; } public void setShowInstalled(boolean showInstalled) { this.showInstalled = showInstalled; } public void setShowNotInstalled(boolean showNotInstalled) { this.showNotInstalled = showNotInstalled; } }