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;
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    
024    import org.apache.camel.Exchange;
025    import org.apache.camel.Processor;
026    import org.apache.camel.spi.RouteContext;
027    import org.apache.camel.support.ExpressionAdapter;
028    
029    /**
030     * Represents an XML <interceptFrom/> element
031     *
032     * @version 
033     */
034    @XmlRootElement(name = "interceptFrom")
035    @XmlAccessorType(XmlAccessType.FIELD)
036    public class InterceptFromDefinition extends InterceptDefinition {
037        @XmlAttribute
038        protected String uri;
039    
040        public InterceptFromDefinition() {
041        }
042    
043        public InterceptFromDefinition(String uri) {
044            this.uri = uri;
045        }
046    
047        @Override
048        public String toString() {
049            return "InterceptFrom[" + getOutputs() + "]";
050        }
051    
052        @Override
053        public String getShortName() {
054            return "interceptFrom";
055        }
056    
057        @Override
058        public String getLabel() {
059            return "interceptFrom";
060        }
061    
062        @Override
063        public boolean isAbstract() {
064            return true;
065        }
066    
067        @Override
068        @SuppressWarnings({"unchecked", "rawtypes"})
069        public Processor createProcessor(RouteContext routeContext) throws Exception {
070            // insert a set header definition so we can set the intercepted endpoint uri as a header
071            // this allows us to use the same header for both the interceptFrom and interceptSendToEndpoint
072            SetHeaderDefinition headerDefinition = new SetHeaderDefinition(Exchange.INTERCEPTED_ENDPOINT, new ExpressionAdapter() {
073                public Object evaluate(Exchange exchange, Class type) {
074                    if (exchange.getFromEndpoint() != null) {
075                        return exchange.getFromEndpoint().getEndpointUri();
076                    } else {
077                        return null;
078                    }
079                }
080    
081                public String toString() {
082                    return "";
083                }
084            });
085            getOutputs().add(0, headerDefinition);
086    
087            return this.createChildProcessor(routeContext, true);
088        }
089    
090        public String getUri() {
091            return uri;
092        }
093    
094        public void setUri(String uri) {
095            this.uri = uri;
096        }
097    }