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.processor.interceptor;
018    
019    import java.util.Date;
020    
021    import org.apache.camel.Exchange;
022    import org.apache.camel.ExchangePattern;
023    import org.apache.camel.impl.DefaultExchange;
024    
025    /**
026     * Represents a trace of an {@link org.apache.camel.Exchange}, intercepted at the given node
027     * that occured during routing.
028     * <p/>
029     * The IN body contains {@link DefaultTraceEventMessage} with trace details of the original IN message.
030     */
031    public class TraceEventExchange extends DefaultExchange {
032        private String nodeId;
033        private Date timestamp;
034        private Exchange tracedExchange;
035    
036        public TraceEventExchange(Exchange parent) {
037            super(parent);
038        }
039    
040        @Override
041        public Exchange newInstance() {
042            TraceEventExchange answer = new TraceEventExchange(this);
043            answer.setNodeId(nodeId);
044            answer.setTimestamp(timestamp);
045            answer.setTracedExchange(tracedExchange);
046            return answer;
047        }
048    
049        /**
050         * Get the id of the node of the trace interception
051         */
052        public String getNodeId() {
053            return nodeId;
054        }
055    
056        /**
057         * Timestamp of the interception
058         */
059        public Date getTimestamp() {
060            return timestamp;
061        }
062    
063        public void setNodeId(String nodeId) {
064            this.nodeId = nodeId;
065        }
066    
067        public void setTimestamp(Date timestamp) {
068            this.timestamp = timestamp;
069        }
070    
071        public Exchange getTracedExchange() {
072            return tracedExchange;
073        }
074    
075        public void setTracedExchange(Exchange tracedExchange) {
076            this.tracedExchange = tracedExchange;
077        }
078    
079        @Override
080        public ExchangePattern getPattern() {
081            return ExchangePattern.InOnly;
082        }
083    
084        @Override
085        public String toString() {
086            return "TraceEventExchange[" + tracedExchange.getExchangeId() + "] on node id: " + nodeId;
087        }
088    }