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