/* * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * * Jalview is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation, either version 3 * of the License, or (at your option) any later version. * * Jalview is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Jalview. If not, see . * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.datamodel.features; import jalview.datamodel.SequenceFeature; /** * An interface to describe a set of one or more feature matchers, where all * matchers are combined with either AND or OR * * @author gmcarstairs * */ public interface FeatureMatcherSetI { /** * Answers true if the feature provided passes this matcher's match condition * * @param feature * @return */ boolean matches(SequenceFeature feature); /** * Adds (ANDs) match condition m to this object's matcher set * * @param m * @throws IllegalStateException * if an attempt is made to AND to existing OR-ed conditions */ void and(FeatureMatcherI m); /** * Answers true if any second condition is AND-ed with this one, false if it * is OR-ed * * @return */ boolean isAnded(); /** * Adds (ORs) the given condition to this object's match conditions * * @param m * @throws IllegalStateException * if an attempt is made to OR to existing AND-ed conditions */ void or(FeatureMatcherI m); /** * Answers an iterator over the combined match conditions * * @return */ Iterable getMatchers(); /** * Answers true if this object contains no conditions * * @return */ boolean isEmpty(); /** * Answers a string representation of this object suitable for use when * persisting data, in a format that can be reliably read back. Any changes to * the format should be backwards compatible. */ String toStableString(); }