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     */
017    package org.apache.camel.model.language;
018    
019    import javax.xml.bind.annotation.XmlAccessType;
020    import javax.xml.bind.annotation.XmlAccessorType;
021    import javax.xml.bind.annotation.XmlAttribute;
022    import javax.xml.bind.annotation.XmlRootElement;
023    import javax.xml.bind.annotation.XmlTransient;
024    
025    import org.apache.camel.CamelContext;
026    import org.apache.camel.Expression;
027    import org.apache.camel.Predicate;
028    import org.apache.camel.util.ObjectHelper;
029    
030    /**
031     * For JSonPath expressions and predicates
032     *
033     * @version 
034     */
035    @XmlRootElement(name = "jsonpath")
036    @XmlAccessorType(XmlAccessType.FIELD)
037    public class JsonPathExpression extends ExpressionDefinition {
038    
039        @XmlAttribute(name = "resultType")
040        private String resultTypeName;
041    
042        @XmlTransient
043        private Class<?> resultType;
044    
045        public JsonPathExpression() {
046        }
047    
048        public JsonPathExpression(String expression) {
049            super(expression);
050        }
051    
052        public String getResultTypeName() {
053            return resultTypeName;
054        }
055    
056        public void setResultTypeName(String resultTypeName) {
057            this.resultTypeName = resultTypeName;
058        }
059    
060        public Class<?> getResultType() {
061            return resultType;
062        }
063    
064        public void setResultType(Class<?> resultType) {
065            this.resultType = resultType;
066        }
067    
068        public String getLanguage() {
069            return "jsonpath";
070        }
071    
072        @Override
073        public Expression createExpression(CamelContext camelContext) {
074            if (resultType == null && resultTypeName != null) {
075                try {
076                    resultType = camelContext.getClassResolver().resolveMandatoryClass(resultTypeName);
077                } catch (ClassNotFoundException e) {
078                    throw ObjectHelper.wrapRuntimeCamelException(e);
079                }
080            }
081            return super.createExpression(camelContext);
082        }
083    
084        @Override
085        protected void configureExpression(CamelContext camelContext, Expression expression) {
086            if (resultType != null) {
087                setProperty(expression, "resultType", resultType);
088            }
089            super.configureExpression(camelContext, expression);
090        }
091    
092        @Override
093        protected void configurePredicate(CamelContext camelContext, Predicate predicate) {
094            if (resultType != null) {
095                setProperty(predicate, "resultType", resultType);
096            }
097            super.configurePredicate(camelContext, predicate);
098        }
099    
100    }