All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.atlasmap.expression.Expression Maven / Gradle / Ivy

/**
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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 io.atlasmap.expression; import java.io.StringReader; import io.atlasmap.expression.internal.LRUCache; import io.atlasmap.expression.parser.ParseException; import io.atlasmap.expression.parser.Parser; /** * * Parses and evaluates a simple expression language. This was originally based * on the selector expression language found in ActiveMQ. It was modified so that * it's supports custom functions and it's comparison expressions were less SQL like, * and more script like. * */ public interface Expression { LRUCache cache = new LRUCache(100); /** * Execute the expression against the given context. * * @param expressionContext * @return * @throws ExpressionException */ Object evaluate(ExpressionContext expressionContext) throws ExpressionException; static Expression parse(String expessionText, FunctionResolver functionResolver) throws ExpressionException { if (functionResolver == null) { functionResolver = (name, args) -> { throw new ParseException("Function not found: " + name); }; } Object result = cache.get(expessionText); if (result instanceof ExpressionException) { throw (ExpressionException) result; } else if (result instanceof Expression) { return (Expression) result; } else { String actual = expessionText; try { Parser parser = new Parser(new StringReader(actual)); parser.functionResolver = functionResolver; Expression e = parser.parse(); cache.put(expessionText, e); return e; } catch (Throwable e) { ExpressionException fe = new ExpressionException(actual, e); cache.put(expessionText, fe); throw fe; } } } static void clearCache() { cache.clear(); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy