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 org.apache.camel.Exchange;
020 import org.apache.camel.Message;
021 import org.apache.camel.spi.UnitOfWork;
022 import org.apache.camel.util.ObjectHelper;
023
024 /**
025 * @version $Revision: 676850 $
026 */
027 public class TraceFormatter {
028 private boolean showBreadCrumb = true;
029 private boolean showNode = true;
030 private boolean showExchangeId;
031 private boolean showProperties = true;
032 private boolean showHeaders = true;
033 private boolean showBody = true;
034 private boolean showBodyType = true;
035
036 public Object format(TraceInterceptor interceptor, Exchange exchange) {
037 Message in = exchange.getIn();
038 Throwable exception = exchange.getException();
039 return (showBreadCrumb ? getBreadCrumbID(exchange) + " " : "")
040 + "-> " + getNodeMessage(interceptor) + " "
041 + (showNode ? interceptor.getNode() + " " : "")
042 + exchange.getPattern()
043 + (showExchangeId ? " Id: " + exchange.getExchangeId() : "")
044 + (showProperties ? " Properties:" + exchange.getProperties() : "")
045 + (showHeaders ? " Headers:" + in.getHeaders() : "")
046 + (showBodyType ? " BodyType:" + getBodyTypeAsString(in) : "")
047 + (showBody ? " Body:" + getBodyAsString(in) : "")
048 + (exception != null ? " Exception: " + exception : "");
049 }
050
051 public boolean isShowBody() {
052 return showBody;
053 }
054
055 public void setShowBody(boolean showBody) {
056 this.showBody = showBody;
057 }
058
059 public boolean isShowBodyType() {
060 return showBodyType;
061 }
062
063 public void setShowBodyType(boolean showBodyType) {
064 this.showBodyType = showBodyType;
065 }
066
067 public boolean isShowBreadCrumb() {
068 return showBreadCrumb;
069 }
070
071 public void setShowBreadCrumb(boolean showBreadCrumb) {
072 this.showBreadCrumb = showBreadCrumb;
073 }
074
075 public boolean isShowExchangeId() {
076 return showExchangeId;
077 }
078
079 public void setShowExchangeId(boolean showExchangeId) {
080 this.showExchangeId = showExchangeId;
081 }
082
083 public boolean isShowHeaders() {
084 return showHeaders;
085 }
086
087 public void setShowHeaders(boolean showHeaders) {
088 this.showHeaders = showHeaders;
089 }
090
091 public boolean isShowProperties() {
092 return showProperties;
093 }
094
095 public void setShowProperties(boolean showProperties) {
096 this.showProperties = showProperties;
097 }
098
099 public boolean isShowNode() {
100 return showNode;
101 }
102
103 public void setShowNode(boolean showNode) {
104 this.showNode = showNode;
105 }
106
107 // Implementation methods
108 //-------------------------------------------------------------------------
109 protected Object getBreadCrumbID(Exchange exchange) {
110 UnitOfWork unitOfWork = exchange.getUnitOfWork();
111 return unitOfWork.getId();
112 }
113
114 protected Object getBodyAsString(Message in) {
115 Object answer = in.getBody(String.class);
116 if (answer == null) {
117 answer = in.getBody();
118 }
119 return answer;
120 }
121
122 protected Object getBodyTypeAsString(Message message) {
123 String answer = ObjectHelper.className(message.getBody());
124 if (answer.startsWith("java.lang.")) {
125 return answer.substring(10);
126 }
127 return answer;
128 }
129
130 protected String getNodeMessage(TraceInterceptor interceptor) {
131 return interceptor.getNode().idOrCreate();
132 }
133
134 }