/* * Copyright (c) 2013-2015 mgm technology partners GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.mgmtp.perfload.perfalyzer.util; import static org.apache.commons.io.FilenameUtils.wildcardMatch; import java.io.File; import java.util.List; import java.util.function.Predicate; /** * @author rnaegele */ public class PerfPredicates { private PerfPredicates() { } public static Predicate<File> parentFileNameEquals(final String fileName) { return new ParentFileNamePredicate(fileName); } public static Predicate<File> fileNameEquals(final String s) { return new FileNameEqualsPredicate(s); } public static Predicate<File> fileNameContains(final String s) { return new FileNameContainsPredicate(s); } public static Predicate<File> fileNameStartsWith(final String s) { return new FileNameStartsWithPredicate(s); } public static Predicate<PerfAlyzerFile> perfAlyzerFileNameContains(final String s) { return new PerfAlyzerFileNameContainsPredicate(s); } public static Predicate<PerfAlyzerFile> perfAlyzerFilePartsMatchWildcards(final String... parts) { return new PerfAlyzerFilePartsMatchWildcardsPredicate(parts); } public static Predicate<File> fileNameMatchesWildcard(final String s) { return new FileNameMatchesWildcardPredicate(s); } private static class ParentFileNamePredicate implements Predicate<File> { private final String fileName; public ParentFileNamePredicate(final String fileName) { this.fileName = fileName; } @Override public boolean test(final File input) { return input.getParentFile().getName().equals(fileName); } } private static class FileNameEqualsPredicate implements Predicate<File> { private final String s; public FileNameEqualsPredicate(final String s) { this.s = s; } @Override public boolean test(final File input) { return input.getName().equals(s); } } private static class FileNameContainsPredicate implements Predicate<File> { private final String s; public FileNameContainsPredicate(final String s) { this.s = s; } @Override public boolean test(final File input) { return input.getName().contains(s); } } private static class FileNameStartsWithPredicate implements Predicate<File> { private final String s; public FileNameStartsWithPredicate(final String s) { this.s = s; } @Override public boolean test(final File input) { return input.getName().startsWith(s); } } private static class PerfAlyzerFileNameContainsPredicate implements Predicate<PerfAlyzerFile> { private final String s; public PerfAlyzerFileNameContainsPredicate(final String s) { this.s = s; } @Override public boolean test(final PerfAlyzerFile input) { return input.getFile().getName().contains(s); } } private static class PerfAlyzerFilePartsMatchWildcardsPredicate implements Predicate<PerfAlyzerFile> { private final String[] parts; public PerfAlyzerFilePartsMatchWildcardsPredicate(final String... parts) { this.parts = parts; } @Override public boolean test(final PerfAlyzerFile input) { List<String> fileNameParts = input.getFileNameParts(); int size = fileNameParts.size(); boolean result = size == parts.length; if (!result) { return false; } for (int i = 0; i < size; i++) { if (!wildcardMatch(fileNameParts.get(i), parts[i])) { return false; } } return true; } } private static class FileNameMatchesWildcardPredicate implements Predicate<File> { private final String s; public FileNameMatchesWildcardPredicate(final String s) { this.s = s; } @Override public boolean test(final File input) { return wildcardMatch(input.getName(), s); } } }