001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.juneau.commons.beanquery; 018 019import java.util.*; 020 021/** 022 * The leaf predicate an application supplies for a <b>custom</b> search operator so the in-memory context can evaluate 023 * it against a cell value (design ยง5.3). 024 * 025 * <p> 026 * Built-in operators do <b>not</b> use this — their type-aware leaf semantics live inside the in-memory context. 027 * The predicate never receives a parsed tree: only the already-split literal string arguments the parser produced 028 * (for example, {@code $myOp(a,b)} yields {@code ["a","b"]}). This keeps the raw-string boundary intact — no 029 * parse tree crosses into caller code. 030 * 031 * @since 10.0.0 032 */ 033@FunctionalInterface 034public interface SearchPredicate { 035 036 /** 037 * Tests whether a cell value matches this custom operator's arguments. 038 * 039 * @param cellValue The row's value for the searched column. May be <jk>null</jk> when the row has no value. 040 * @param args The literal string arguments parsed from the operator invocation (never <jk>null</jk>; may be empty). 041 * @return <jk>true</jk> if the row matches. 042 */ 043 boolean test(Object cellValue, List<String> args); 044}