Author: davsclaus
Date: Tue Jul 15 02:33:17 2008
New Revision: 676850

URL: http://svn.apache.org/viewvc?rev=676850&view=rev
Log:
CAMEL-721: Log component now hos output options similiar to the tracer.

Added:
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/LogFormatter.java
   (with props)
    
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/log/LogFormatterTest.java
   (with props)
Modified:
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/LogComponent.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Logger.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceFormatter.java

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/LogComponent.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/LogComponent.java?rev=676850&r1=676849&r2=676850&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/LogComponent.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/LogComponent.java
 Tue Jul 15 02:33:17 2008
@@ -20,6 +20,7 @@
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
+import org.apache.camel.util.IntrospectionSupport;
 import org.apache.camel.converter.ObjectConverter;
 import org.apache.camel.impl.DefaultComponent;
 import org.apache.camel.impl.ProcessorEndpoint;
@@ -43,7 +44,12 @@
         if (groupSize != null) {
             logger = new ThroughputLogger(remaining, level, 
ObjectConverter.toInteger(groupSize));
         } else {
-            logger = new Logger(remaining, level);
+            LogFormatter formatter = new LogFormatter();
+            IntrospectionSupport.setProperties(formatter, parameters);
+
+            logger = new Logger(remaining);
+            logger.setLevel(level);
+            logger.setFormatter(formatter);
         }
 
         return new ProcessorEndpoint(uri, this, logger);

Added: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/LogFormatter.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/LogFormatter.java?rev=676850&view=auto
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/LogFormatter.java
 (added)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/LogFormatter.java
 Tue Jul 15 02:33:17 2008
@@ -0,0 +1,173 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.log;
+
+import org.apache.camel.processor.interceptor.ExchangeFormatter;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.util.ObjectHelper;
+
+/**
+ * Log formatter to format the logging output.
+ */
+public class LogFormatter implements ExchangeFormatter {
+
+    private boolean showExchangeId;
+    private boolean showProperties;
+    private boolean showHeaders;
+    private boolean showBodyType = true;
+    private boolean showBody = true;
+    private boolean showOut;
+    private boolean showAll;
+    private boolean multiline;
+
+    public Object format(Exchange exchange) {
+        Message in = exchange.getIn();
+
+        StringBuilder sb = new StringBuilder("");
+        if (showAll || showExchangeId) {
+            if (multiline) sb.append('\n');
+            sb.append(", Id:").append(exchange.getExchangeId());
+        }
+        if (showAll || showProperties) {
+            if (multiline) sb.append('\n');
+            sb.append(", Properties:").append(exchange.getProperties());
+        }
+        if (showAll || showHeaders) {
+            if (multiline) sb.append('\n');
+            sb.append(", Headers:").append(in.getHeaders());
+        }
+        if (showAll || showBodyType) {
+            if (multiline) sb.append('\n');
+            sb.append(", BodyType:").append(getBodyTypeAsString(in));
+        }
+        if (showAll || showBody) {
+            if (multiline) sb.append('\n');
+            sb.append(", Body:").append(getBodyAsString(in));
+        }
+
+        Message out = exchange.getOut(false);
+        if (showAll || showOut) {
+            if (out != null) {
+                if (showAll || showHeaders) {
+                    if (multiline) sb.append('\n');
+                    sb.append(", OutHeaders:").append(out.getHeaders());
+                }
+                if (showAll || showBodyType) {
+                    if (multiline) sb.append('\n');
+                    sb.append(", 
OutBodyType:").append(getBodyTypeAsString(out));
+                }
+                if (showAll || showBody) {
+                    if (multiline) sb.append('\n');
+                    sb.append(", OutBody:").append(getBodyAsString(out));
+                }
+            } else {
+                if (multiline) sb.append('\n');
+                sb.append(", Out: null");
+            }
+        }
+
+        // get rid of the leading space comma if needed
+        return "Exchange[" + (multiline ? sb.append(']').toString() : 
sb.toString().substring(2) + "]");
+    }
+
+    public boolean isShowExchangeId() {
+        return showExchangeId;
+    }
+
+    public void setShowExchangeId(boolean showExchangeId) {
+        this.showExchangeId = showExchangeId;
+    }
+
+    public boolean isShowProperties() {
+        return showProperties;
+    }
+
+    public void setShowProperties(boolean showProperties) {
+        this.showProperties = showProperties;
+    }
+
+    public boolean isShowHeaders() {
+        return showHeaders;
+    }
+
+    public void setShowHeaders(boolean showHeaders) {
+        this.showHeaders = showHeaders;
+    }
+
+    public boolean isShowBodyType() {
+        return showBodyType;
+    }
+
+    public void setShowBodyType(boolean showBodyType) {
+        this.showBodyType = showBodyType;
+    }
+
+    public boolean isShowBody() {
+        return showBody;
+    }
+
+    public void setShowBody(boolean showBody) {
+        this.showBody = showBody;
+    }
+
+    public boolean isShowOut() {
+        return showOut;
+    }
+
+    public void setShowOut(boolean showOut) {
+        this.showOut = showOut;
+    }
+
+    public boolean isShowAll() {
+        return showAll;
+    }
+
+    public void setShowAll(boolean showAll) {
+        this.showAll = showAll;
+    }
+
+    public boolean isMultiline() {
+        return multiline;
+    }
+
+    /**
+     * If enabled then each information is outputted on a newline.
+     */
+    public void setMultiline(boolean multiline) {
+        this.multiline = multiline;
+    }
+
+    // Implementation methods
+    //-------------------------------------------------------------------------
+    protected Object getBodyAsString(Message message) {
+        Object answer = message.getBody(String.class);
+        if (answer == null) {
+            answer = message.getBody();
+        }
+        return answer;
+    }
+
+    protected Object getBodyTypeAsString(Message message) {
+        String answer = ObjectHelper.className(message.getBody());
+        if (answer.startsWith("java.lang.")) {
+            return answer.substring(10);
+        }
+        return answer;
+    }
+
+}

Propchange: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/LogFormatter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/LogFormatter.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java?rev=676850&r1=676849&r2=676850&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java
 Tue Jul 15 02:33:17 2008
@@ -115,6 +115,12 @@
             throw new ResolveEndpointFailedException(uri, "Invalid uri syntax: 
no ? marker however the uri "
                 + "has & parameter separators. Check the uri if its missing a 
? marker.");
         }
+
+        // check for uri containing double && markers
+        if (uri.contains("&&")) {
+            throw new ResolveEndpointFailedException(uri, "Invalid uri syntax: 
Double && marker found. "
+                + "Check the uri and remove the duplicate & marker.");
+        }
     }
 
     public CamelContext getCamelContext() {

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Logger.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Logger.java?rev=676850&r1=676849&r2=676850&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Logger.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Logger.java
 Tue Jul 15 02:33:17 2008
@@ -233,4 +233,8 @@
     public void setLevel(LoggingLevel level) {
         this.level = level;
     }
+
+    public void setFormatter(ExchangeFormatter formatter) {
+        this.formatter = formatter;
+    }
 }

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceFormatter.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceFormatter.java?rev=676850&r1=676849&r2=676850&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceFormatter.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceFormatter.java
 Tue Jul 15 02:33:17 2008
@@ -43,7 +43,7 @@
                 + (showExchangeId ? " Id: " + exchange.getExchangeId() : "")
                 + (showProperties ? " Properties:" + exchange.getProperties() 
: "")
                 + (showHeaders ? " Headers:" + in.getHeaders() : "")
-                + (showBodyType ? " BodyType:" + 
ObjectHelper.className(in.getBody()) : "")
+                + (showBodyType ? " BodyType:" + getBodyTypeAsString(in) : "")
                 + (showBody ? " Body:" + getBodyAsString(in) : "")
                 + (exception != null ? " Exception: " + exception : "");
     }
@@ -119,6 +119,14 @@
         return answer;
     }
 
+    protected Object getBodyTypeAsString(Message message) {
+        String answer = ObjectHelper.className(message.getBody());
+        if (answer.startsWith("java.lang.")) {
+            return answer.substring(10);
+        }
+        return answer;
+    }
+
     protected String getNodeMessage(TraceInterceptor interceptor) {
         return interceptor.getNode().idOrCreate();
     }

Added: 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/log/LogFormatterTest.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/log/LogFormatterTest.java?rev=676850&view=auto
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/log/LogFormatterTest.java
 (added)
+++ 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/log/LogFormatterTest.java
 Tue Jul 15 02:33:17 2008
@@ -0,0 +1,68 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.log;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Producer;
+
+/**
+ * Log formatter test.
+ */
+public class LogFormatterTest extends ContextTestSupport {
+
+    public void testSendMessageToLogDefault() throws Exception {
+        template.sendBody("log:org.apache.camel.TEST", "Hello World");
+    }
+
+    public void testSendMessageToLogSingleOptions() throws Exception {
+        template.sendBody("log:org.apache.camel.TEST?showExchangeId=true", 
"Hello World");
+        template.sendBody("log:org.apache.camel.TEST?showProperties=true", 
"Hello World");
+        template.sendBody("log:org.apache.camel.TEST?showHeaders=true", "Hello 
World");
+        template.sendBody("log:org.apache.camel.TEST?showBodyType=true", 
"Hello World");
+        template.sendBody("log:org.apache.camel.TEST?showBody=true", "Hello 
World");
+        template.sendBody("log:org.apache.camel.TEST?showOut=true", "Hello 
World");
+        template.sendBody("log:org.apache.camel.TEST?showAll=true", "Hello 
World");
+    }
+
+    public void testSendMessageToLogMultiOptions() throws Exception {
+        
template.sendBody("log:org.apache.camel.TEST?showHeaders=true&showOut=true", 
"Hello World");
+        
template.sendBody("log:org.apache.camel.TEST?showProperties=true&showHeaders=true&showOut=true",
 "Hello World");
+    }
+
+    public void testSendMessageToLogShowFalse() throws Exception {
+        template.sendBody("log:org.apache.camel.TEST?showBodyType=false", 
"Hello World");
+    }
+
+    public void testSendMessageToLogMultiLine() throws Exception {
+        template.sendBody("log:org.apache.camel.TEST?multiline=true", "Hello 
World");
+    }
+
+    public void testSendExchangeWithOut() throws Exception {
+        Endpoint endpoint = 
resolveMandatoryEndpoint("log:org.apache.camel.TEST?showAll=true&multiline=true");
+        Exchange exchange = endpoint.createExchange();
+        exchange.getIn().setBody("Hello World");
+        exchange.getOut().setBody(22);
+
+        Producer producer = endpoint.createProducer();
+        producer.start();
+        producer.process(exchange);
+        producer.stop();
+    }
+
+}

Propchange: 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/log/LogFormatterTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/log/LogFormatterTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date


Reply via email to