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        public boolean isTopLevelOnly() {
069            return true;
070        }
071    
072        @Override
073        @SuppressWarnings({"unchecked", "rawtypes"})
074        public Processor createProcessor(RouteContext routeContext) throws Exception {
075            // insert a set header definition so we can set the intercepted endpoint uri as a header
076            // this allows us to use the same header for both the interceptFrom and interceptSendToEndpoint
077            SetHeaderDefinition headerDefinition = new SetHeaderDefinition(Exchange.INTERCEPTED_ENDPOINT, new ExpressionAdapter() {
078                public Object evaluate(Exchange exchange, Class type) {
079                    if (exchange.getFromEndpoint() != null) {
080                        return exchange.getFromEndpoint().getEndpointUri();
081                    } else {
082                        return null;
083                    }
084                }
085    
086                public String toString() {
087                    return "";
088                }
089            });
090            getOutputs().add(0, headerDefinition);
091    
092            return this.createChildProcessor(routeContext, true);
093        }
094    
095        public String getUri() {
096            return uri;
097        }
098    
099        public void setUri(String uri) {
100            this.uri = uri;
101        }
102    }