Repository: karaf-decanter
Updated Branches:
  refs/heads/master e4d460382 -> 029a6df5c


Refactor event processing to avoid duplication and split camel logic from 
decanter logic


Project: http://git-wip-us.apache.org/repos/asf/karaf-decanter/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf-decanter/commit/029a6df5
Tree: http://git-wip-us.apache.org/repos/asf/karaf-decanter/tree/029a6df5
Diff: http://git-wip-us.apache.org/repos/asf/karaf-decanter/diff/029a6df5

Branch: refs/heads/master
Commit: 029a6df5c39b54989b302aa3fffa612ba3481a0d
Parents: e4d4603
Author: Christian Schneider <[email protected]>
Authored: Wed Jul 19 09:08:24 2017 +0200
Committer: Christian Schneider <[email protected]>
Committed: Wed Jul 19 09:08:24 2017 +0200

----------------------------------------------------------------------
 .../collector/camel/CamelEventMapper.java       | 107 ++++++++
 .../collector/camel/DecanterEventNotifier.java  | 246 ++++++-------------
 .../camel/DecanterTraceEventHandler.java        | 110 ++-------
 .../camel/DefaultExchangeExtender.java          | 107 ++++++++
 4 files changed, 315 insertions(+), 255 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/029a6df5/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/CamelEventMapper.java
----------------------------------------------------------------------
diff --git 
a/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/CamelEventMapper.java
 
b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/CamelEventMapper.java
new file mode 100644
index 0000000..2c13a20
--- /dev/null
+++ 
b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/CamelEventMapper.java
@@ -0,0 +1,107 @@
+/*
+ * 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.karaf.decanter.collector.camel;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Route;
+import org.apache.camel.management.event.CamelContextResumeFailureEvent;
+import org.apache.camel.management.event.CamelContextStartupFailureEvent;
+import org.apache.camel.management.event.CamelContextStopFailureEvent;
+import org.apache.camel.management.event.ExchangeFailureHandledEvent;
+import org.apache.camel.management.event.ExchangeRedeliveryEvent;
+import org.apache.camel.management.event.ExchangeSendingEvent;
+import org.apache.camel.management.event.ExchangeSentEvent;
+import org.apache.camel.management.event.ServiceStartupFailureEvent;
+import org.apache.camel.management.event.ServiceStopFailureEvent;
+
+public class CamelEventMapper {
+    
+    public Map<String, Object> toMap(EventObject event) throws 
UnknownHostException {
+        HashMap<String, Object> data = new HashMap<String, Object>();
+        data.put("eventType", event.getClass().getName());
+        data.put("type", "camelEvent");
+        data.put("karafName", System.getProperty("karaf.name"));
+        data.put("hostAddress", InetAddress.getLocalHost().getHostAddress());
+        data.put("hostName", InetAddress.getLocalHost().getHostName());
+        data.put("timestamp", System.currentTimeMillis());
+        
+        Object source = event.getSource();
+        if (event instanceof ExchangeSentEvent) {
+            ExchangeSentEvent sent = (ExchangeSentEvent) event;
+            data.put("sentToEndpointUri", sent.getEndpoint()
+                    .getEndpointUri());
+            data.put("sentTimeTaken", sent.getTimeTaken());
+        }
+        if (event instanceof ExchangeSendingEvent) {
+            ExchangeSendingEvent sending = (ExchangeSendingEvent) event;
+            data.put("sendingToEndpointUri", 
sending.getEndpoint().getEndpointUri());
+        }
+        if (event instanceof ExchangeFailureHandledEvent) {
+            ExchangeFailureHandledEvent failHandled = 
(ExchangeFailureHandledEvent) event;
+            data.put("failureIsHandled", failHandled.isHandled());
+            data.put("failureIsDeadLetterChannel", 
failHandled.isDeadLetterChannel());
+            data.put("failureHandler", failHandled.getFailureHandler() == null 
? "null"
+                            : 
failHandled.getFailureHandler().getClass().getName());
+        }
+        if (event instanceof ExchangeRedeliveryEvent) {
+            ExchangeRedeliveryEvent redelivery = (ExchangeRedeliveryEvent) 
event;
+            data.put("redeliveryAttempt", redelivery.getAttempt());
+        }
+        if (source instanceof Route) {
+            Route route = (Route)source;
+            data.put("routeId", route.getId());
+            data.put("camelContextName", 
route.getRouteContext().getCamelContext().getName());
+        }
+        if (source instanceof CamelContext) {
+            CamelContext context = (CamelContext)source;
+            data.put("camelContextName", context.getName());
+        }
+            
+        if (event instanceof ServiceStartupFailureEvent) {
+            ServiceStartupFailureEvent service = (ServiceStartupFailureEvent) 
event;
+            data.put("serviceName", service.getService().getClass().getName());
+            data.put("camelContextName", service.getContext().getName());
+            data.put("cause", service.getCause().toString());
+        }
+        if (event instanceof ServiceStopFailureEvent) {
+            ServiceStopFailureEvent service = (ServiceStopFailureEvent) event;
+            data.put("serviceName", service.getService().getClass().getName());
+            data.put("camelContextName", service.getContext().getName());
+            data.put("cause", service.getCause().toString());
+        }
+        if (event instanceof CamelContextResumeFailureEvent) {
+            CamelContextResumeFailureEvent context = 
(CamelContextResumeFailureEvent) event;
+            data.put("cause", context.getCause().toString());
+        }
+        if (event instanceof CamelContextStartupFailureEvent) {
+            CamelContextStartupFailureEvent context = 
(CamelContextStartupFailureEvent) event;
+            data.put("cause", context.getCause().toString());
+        }
+        if (event instanceof CamelContextStopFailureEvent) {
+            CamelContextStartupFailureEvent context = 
(CamelContextStartupFailureEvent) event;
+            data.put("cause", context.getCause().toString());
+        }
+        return data;
+    }
+    
+}

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/029a6df5/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterEventNotifier.java
----------------------------------------------------------------------
diff --git 
a/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterEventNotifier.java
 
b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterEventNotifier.java
index e07efad..df417d0 100644
--- 
a/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterEventNotifier.java
+++ 
b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterEventNotifier.java
@@ -1,22 +1,27 @@
+/*
+ * 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.karaf.decanter.collector.camel;
 
-import java.net.InetAddress;
-import java.net.UnknownHostException;
 import java.util.EventObject;
-import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.Route;
-import org.apache.camel.RouteNode;
-import org.apache.camel.spi.TracedRouteNodes;
-import org.apache.camel.support.EventNotifierSupport;
-import org.apache.camel.util.MessageHelper;
-import org.apache.camel.management.event.AbstractExchangeEvent;
-import org.apache.camel.management.event.CamelContextResumeFailureEvent;
-import org.apache.camel.management.event.CamelContextStartupFailureEvent;
-import org.apache.camel.management.event.CamelContextStopFailureEvent;
 import org.apache.camel.management.event.ExchangeCompletedEvent;
 import org.apache.camel.management.event.ExchangeCreatedEvent;
 import org.apache.camel.management.event.ExchangeFailureHandledEvent;
@@ -25,10 +30,9 @@ import 
org.apache.camel.management.event.ExchangeSendingEvent;
 import org.apache.camel.management.event.ExchangeSentEvent;
 import org.apache.camel.management.event.ServiceStartupFailureEvent;
 import org.apache.camel.management.event.ServiceStopFailureEvent;
-
+import org.apache.camel.support.EventNotifierSupport;
 import org.osgi.service.event.Event;
 import org.osgi.service.event.EventAdmin;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -39,10 +43,8 @@ public class DecanterEventNotifier extends 
EventNotifierSupport {
     private EventAdmin eventAdmin;
     private String camelContextMatcher = ".*";
     private String routeMatcher = ".*";
-    private DecanterCamelEventExtender extender = null;
-    private boolean includeProperties = true;
-    private boolean includeHeaders = true;
-    private boolean includeBody = true;
+    private DefaultExchangeExtender dextender = new DefaultExchangeExtender();
+    private DecanterCamelEventExtender extender;
 
     public EventAdmin getEventAdmin() {
         return eventAdmin;
@@ -63,13 +65,58 @@ public class DecanterEventNotifier extends 
EventNotifierSupport {
     public void setExtender(DecanterCamelEventExtender extender) {
         this.extender = extender;
     }
+    
+    public void setIncludeBody(boolean includeBody) {
+        dextender.setIncludeBody(includeBody);
+    }
 
     public void setIncludeHeaders(boolean includeHeaders) {
-        this.includeHeaders = includeHeaders;
+        dextender.setIncludeHeaders(includeHeaders);
     }
 
     public void setIncludeProperties(boolean includeProperties) {
-        this.includeProperties = includeProperties;
+        dextender.setIncludeProperties(includeProperties);
+    }
+    
+    private boolean isIgnored(EventObject event) {
+        if (isIgnoredBySourceType(event)) {
+            return true;
+        }
+        
+        if (event instanceof ExchangeSentEvent && 
isIgnoreExchangeSentEvents()) {
+            return true;
+        }
+        if (event instanceof ExchangeSendingEvent && 
isIgnoreExchangeSendingEvents()) {
+            return true;
+        }
+        if (event instanceof ExchangeFailureHandledEvent && 
isIgnoreExchangeFailedEvents()) {
+            return true;
+        }
+        if (event instanceof ExchangeRedeliveryEvent && 
isIgnoreExchangeRedeliveryEvents()) {
+            return true;
+        }
+        if (event instanceof ExchangeCompletedEvent && 
isIgnoreExchangeCompletedEvent()) {
+            return true;
+        }
+        if (event instanceof ExchangeCreatedEvent && 
isIgnoreExchangeCreatedEvent()) {
+            return true;
+        }
+            
+        if (event instanceof ServiceStartupFailureEvent && 
isIgnoreServiceEvents()) {
+            return true;
+        }
+        if (event instanceof ServiceStopFailureEvent && 
isIgnoreServiceEvents()) {
+            return true;
+        }
+        
+        return false;
+    }
+
+    private boolean isIgnoredBySourceType(EventObject event) {
+        Object source = event.getSource();
+        return (source instanceof Exchange && isIgnoreExchangeEvents()
+            || source instanceof Route && isIgnoreRouteEvents()
+            || source instanceof CamelContext && isIgnoreCamelContextEvents());
     }
 
     @Override
@@ -77,6 +124,9 @@ public class DecanterEventNotifier extends 
EventNotifierSupport {
         if (eventObject == null) {
             return false;
         }
+        if (isIgnored(eventObject)) {
+            return false;
+        }
         Object source = eventObject.getSource();
         if (source instanceof Exchange) {
             Exchange exchange = (Exchange)source;
@@ -100,83 +150,15 @@ public class DecanterEventNotifier extends 
EventNotifierSupport {
 
     public void notify(EventObject event) throws Exception {
         try {
-            Map<String, Object> eventMap = createEvent(event,
-                    event instanceof AbstractExchangeEvent ? 
((AbstractExchangeEvent) event)
-                            .getExchange() : null);
-            boolean post = false;
+            Map<String, Object> eventMap = new CamelEventMapper().toMap(event);
             Object source = event.getSource();
-            if (event instanceof ExchangeSentEvent && 
!isIgnoreExchangeEvents() && !isIgnoreExchangeSentEvents()) {
-                ExchangeSentEvent sent = (ExchangeSentEvent) event;
-                eventMap.put("sentToEndpointUri", sent.getEndpoint()
-                        .getEndpointUri());
-                eventMap.put("sentTimeTaken", sent.getTimeTaken());
-                post = true;
-            }
-            if (event instanceof ExchangeSendingEvent && 
!isIgnoreExchangeEvents() && !isIgnoreExchangeSendingEvents()) {
-                ExchangeSendingEvent sending = (ExchangeSendingEvent) event;
-                eventMap.put("sendingToEndpointUri", 
sending.getEndpoint().getEndpointUri());
-                post = true;
-            }
-            if (event instanceof ExchangeFailureHandledEvent && 
!isIgnoreExchangeEvents() && !isIgnoreExchangeFailedEvents()) {
-                ExchangeFailureHandledEvent failHandled = 
(ExchangeFailureHandledEvent) event;
-                eventMap.put("failureIsHandled", failHandled.isHandled());
-                eventMap.put("failureIsDeadLetterChannel", 
failHandled.isDeadLetterChannel());
-                eventMap.put("failureHandler", failHandled.getFailureHandler() 
== null ? "null"
-                                : 
failHandled.getFailureHandler().getClass().getName());
-                post = true;
-            }
-            if (event instanceof ExchangeRedeliveryEvent && 
!isIgnoreExchangeEvents() && !isIgnoreExchangeRedeliveryEvents()) {
-                ExchangeRedeliveryEvent redelivery = (ExchangeRedeliveryEvent) 
event;
-                eventMap.put("redeliveryAttempt", redelivery.getAttempt());
-                post = true;
-            }
-            if (source instanceof Route && !isIgnoreRouteEvents()) {
-                Route route = (Route)source;
-                eventMap.put("routeId", route.getId());
-                eventMap.put("camelContextName", 
route.getRouteContext().getCamelContext().getName());
-                post = true;
-            }
-            if (source instanceof CamelContext && 
!isIgnoreCamelContextEvents()) {
-                CamelContext context = (CamelContext)source;
-                eventMap.put("camelContextName", context.getName());
-                post = true;
-            }
-                
-            if (event instanceof ServiceStartupFailureEvent && 
!isIgnoreServiceEvents()) {
-                ServiceStartupFailureEvent service = 
(ServiceStartupFailureEvent) event;
-                eventMap.put("serviceName", 
service.getService().getClass().getName());
-                eventMap.put("camelContextName", 
service.getContext().getName());
-                eventMap.put("cause", service.getCause().toString());
-                post = true;
-            }
-            if (event instanceof ServiceStopFailureEvent && 
!isIgnoreServiceEvents()) {
-                ServiceStopFailureEvent service = (ServiceStopFailureEvent) 
event;
-                eventMap.put("serviceName", 
service.getService().getClass().getName());
-                eventMap.put("camelContextName", 
service.getContext().getName());
-                eventMap.put("cause", service.getCause().toString());
-                post = true;
-            }
-            if (event instanceof CamelContextResumeFailureEvent && 
!isIgnoreCamelContextEvents()) {
-                CamelContextResumeFailureEvent context = 
(CamelContextResumeFailureEvent) event;
-                eventMap.put("cause", context.getCause().toString());
-            }
-            if (event instanceof CamelContextStartupFailureEvent && 
!isIgnoreCamelContextEvents()) {
-                CamelContextStartupFailureEvent context = 
(CamelContextStartupFailureEvent) event;
-                eventMap.put("cause", context.getCause().toString());
-            }
-            if (event instanceof CamelContextStopFailureEvent && 
!isIgnoreCamelContextEvents()) {
-                CamelContextStartupFailureEvent context = 
(CamelContextStartupFailureEvent) event;
-                eventMap.put("cause", context.getCause().toString());
-            }
-            if (event instanceof ExchangeCompletedEvent && 
!isIgnoreExchangeEvents() && !isIgnoreExchangeCompletedEvent()) {
-                post = true;
-            }
-            if (event instanceof ExchangeCreatedEvent && 
!isIgnoreExchangeEvents() && !isIgnoreExchangeCreatedEvent()) {
-                post = true;
-            }
-            if (post) {
-                eventAdmin.postEvent(new Event("decanter/collect/camel/event", 
eventMap));
+            if (source instanceof Exchange) {
+                dextender.extend(eventMap, (Exchange)source);
+                if (extender != null) {
+                    extender.extend(eventMap, (Exchange)source);
+                }
             }
+            eventAdmin.postEvent(new Event("decanter/collect/camel/event", 
eventMap));
         } catch (Exception ex) {
             LOG.warn("Failed to handle event", ex);
         }
@@ -188,80 +170,4 @@ public class DecanterEventNotifier extends 
EventNotifierSupport {
     protected void doStop() throws Exception {
     }
 
-    private Map<String, Object> createEvent(EventObject event, Exchange 
exchange) throws UnknownHostException {
-        HashMap<String, Object> data = new HashMap<String, Object>();
-        data.put("eventType", event.getClass().getName());
-        data.put("type", "camelEvent");
-        data.put("karafName", System.getProperty("karaf.name"));
-        data.put("hostAddress", InetAddress.getLocalHost().getHostAddress());
-        data.put("hostName", InetAddress.getLocalHost().getHostName());
-        data.put("timestamp", System.currentTimeMillis());
-
-        if (exchange == null) {
-            return data;
-        }
-        data.put("fromEndpointUri", exchange.getFromEndpoint() != null ? 
exchange.getFromEndpoint().getEndpointUri() : null);
-        data.put("previousNode", extractFromNode(exchange));
-        data.put("toNode", extractToNode(exchange));
-        data.put("exchangeId", exchange.getExchangeId());
-        data.put("routeId", exchange.getFromRouteId());
-        data.put("camelContextName", exchange.getContext().getName());
-        data.put("shortExchangeId", extractShortExchangeId(exchange));
-        data.put("exchangePattern", exchange.getPattern().toString());
-        if (includeProperties) {
-            data.put("properties", exchange.getProperties());
-        }
-        if (includeHeaders) {
-            data.put("inHeaders", exchange.getIn().getHeaders());
-        }
-        if (includeBody) {
-            data.put("inBody", 
MessageHelper.extractBodyAsString(exchange.getIn()));
-        }
-        data.put("inBodyType", 
MessageHelper.getBodyTypeName(exchange.getIn()));
-        if (exchange.hasOut()) {
-            if (includeHeaders) {
-                data.put("outHeaders", exchange.getOut().getHeaders());
-            }
-            if (includeBody) {
-                data.put("outBody", 
MessageHelper.extractBodyAsString(exchange.getOut()));
-            }
-            data.put("outBodyType", 
MessageHelper.getBodyTypeName(exchange.getOut()));
-        }
-        data.put("causedByException", extractCausedByException(exchange));
-        if (extender != null) {
-            extender.extend(data, exchange);
-        }
-        return data;
-    }
-
-    private static String extractShortExchangeId(Exchange exchange) {
-        return 
exchange.getExchangeId().substring(exchange.getExchangeId().indexOf("/") + 1);
-    }
-
-    private static String extractFromNode(Exchange exchange) {
-        if (exchange.getUnitOfWork() == null) {
-            return null;
-        }
-        TracedRouteNodes traced = 
exchange.getUnitOfWork().getTracedRouteNodes();
-        RouteNode last = traced.getSecondLastNode();
-        return last != null ? last.getLabel(exchange) : null;
-    }
-
-    private static String extractToNode(Exchange exchange) {
-        if (exchange.getUnitOfWork() == null) {
-            return null;
-        }
-        TracedRouteNodes traced = 
exchange.getUnitOfWork().getTracedRouteNodes();
-        RouteNode last = traced.getLastNode();
-        return last != null ? last.getLabel(exchange) : null;
-    }
-
-    private static String extractCausedByException(Exchange exchange) {
-        Throwable cause = exchange.getException();
-        if (cause == null) {
-            cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, 
Throwable.class);
-        }
-        return (cause != null) ? cause.toString() : null;
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/029a6df5/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterTraceEventHandler.java
----------------------------------------------------------------------
diff --git 
a/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterTraceEventHandler.java
 
b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterTraceEventHandler.java
index 3cf43d9..e658528 100644
--- 
a/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterTraceEventHandler.java
+++ 
b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterTraceEventHandler.java
@@ -16,50 +16,22 @@
  */
 package org.apache.karaf.decanter.collector.camel;
 
+import java.net.InetAddress;
+import java.util.HashMap;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
-import org.apache.camel.RouteNode;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.processor.interceptor.TraceEventHandler;
 import org.apache.camel.processor.interceptor.TraceInterceptor;
-import org.apache.camel.spi.TracedRouteNodes;
-import org.apache.camel.util.MessageHelper;
 import org.osgi.service.event.Event;
 import org.osgi.service.event.EventAdmin;
 
-import java.net.InetAddress;
-import java.util.HashMap;
-
 public class DecanterTraceEventHandler implements TraceEventHandler {
 
     private EventAdmin eventAdmin;
-    private DecanterCamelEventExtender extender = null;
-    private boolean includeHeaders = true;
-    private boolean includeProperties = true;
-    private boolean includeBody = true;
-
-    public DecanterTraceEventHandler() {
-    }
-
-    public EventAdmin getEventAdmin() {
-        return eventAdmin;
-    }
-
-    public void setExtender(DecanterCamelEventExtender extender) {
-        this.extender = extender;
-    }
-
-    public void setEventAdmin(EventAdmin eventAdmin) {
-        this.eventAdmin = eventAdmin;
-    }
-
-    public void setIncludeHeaders(boolean includeHeaders) {
-        this.includeHeaders = includeHeaders;
-    }
-
-    public void setIncludeProperties(boolean includeProperties) {
-        this.includeProperties = includeProperties;
-    }
+    private DefaultExchangeExtender dextender = new DefaultExchangeExtender();
+    private DecanterCamelEventExtender extender;
 
     @Override
     public void traceExchange(ProcessorDefinition<?> node, Processor target, 
TraceInterceptor traceInterceptor, Exchange exchange) throws Exception {
@@ -70,47 +42,21 @@ public class DecanterTraceEventHandler implements 
TraceEventHandler {
         data.put("hostName", InetAddress.getLocalHost().getHostName());
         data.put("nodeId", node.getId());
         data.put("timestamp", System.currentTimeMillis());
-        data.put("fromEndpointUri", exchange.getFromEndpoint() != null ? 
exchange.getFromEndpoint().getEndpointUri() : null);
-        data.put("previousNode", extractFromNode(exchange));
-        data.put("toNode", extractToNode(exchange));
-        data.put("exchangeId", exchange.getExchangeId());
-        data.put("routeId", exchange.getFromRouteId());
-        data.put("camelContextName", exchange.getContext().getName());
-        data.put("shortExchangeId", extractShortExchangeId(exchange));
-        data.put("exchangePattern", exchange.getPattern().toString());
+        new DefaultExchangeExtender().extend(data, exchange);
         for (String property : exchange.getProperties().keySet()) {
             if (property.startsWith("decanter.")) {
                 data.put(property.substring("decanter.".length()), 
exchange.getProperties().get(property));
             }
         }
-        if (includeProperties) {
-            data.put("properties", exchange.getProperties().isEmpty() ? null : 
exchange.getProperties());
+        dextender.extend(data, exchange);
+        if (extender != null)  {
+            extender.extend(data, exchange);
         }
         for (String header : exchange.getIn().getHeaders().keySet()) {
             if (header.startsWith("decanter.")) {
                 data.put(header.substring("decanter.".length()), 
exchange.getIn().getHeader(header));
             }
         }
-        if (includeHeaders) {
-            data.put("inHeaders", exchange.getIn().getHeaders().isEmpty() ? 
null : exchange.getIn().getHeaders());
-        }
-        if (includeBody) {
-            data.put("inBody", 
MessageHelper.extractBodyAsString(exchange.getIn()));
-        }
-        data.put("inBodyType", 
MessageHelper.getBodyTypeName(exchange.getIn()));
-        if (exchange.hasOut()) {
-            if (includeHeaders) {
-                data.put("outHeaders", 
exchange.getOut().getHeaders().isEmpty() ? null : 
exchange.getOut().getHeaders());
-            }
-            if (includeBody) {
-                data.put("outBody", 
MessageHelper.extractBodyAsString(exchange.getOut()));
-            }
-            data.put("outBodyType", 
MessageHelper.getBodyTypeName(exchange.getOut()));
-        }
-        data.put("causedByException", extractCausedByException(exchange));
-        if (extender != null) {
-            extender.extend(data, exchange);
-        }
         Event event = new Event("decanter/collect/camel/tracer", data);
         eventAdmin.postEvent(event);
     }
@@ -125,35 +71,29 @@ public class DecanterTraceEventHandler implements 
TraceEventHandler {
     public void traceExchangeOut(ProcessorDefinition<?> node, Processor 
target, TraceInterceptor traceInterceptor, Exchange exchange, Object 
traceState) throws Exception {
         traceExchange(node, target, traceInterceptor, exchange);
     }
+    
+    public EventAdmin getEventAdmin() {
+        return eventAdmin;
+    }
 
-    private static String extractShortExchangeId(Exchange exchange) {
-        return 
exchange.getExchangeId().substring(exchange.getExchangeId().indexOf("/") + 1);
+    public void setExtender(DecanterCamelEventExtender extender) {
+        this.extender = extender;
     }
 
-    private static String extractFromNode(Exchange exchange) {
-        if (exchange.getUnitOfWork() == null) {
-            return null;
-        }
-        TracedRouteNodes traced = 
exchange.getUnitOfWork().getTracedRouteNodes();
-        RouteNode last = traced.getSecondLastNode();
-        return last != null ? last.getLabel(exchange) : null;
+    public void setEventAdmin(EventAdmin eventAdmin) {
+        this.eventAdmin = eventAdmin;
+    }
+    
+    public void setIncludeBody(boolean includeBody) {
+        dextender.setIncludeBody(includeBody);
     }
 
-    private static String extractToNode(Exchange exchange) {
-        if (exchange.getUnitOfWork() == null) {
-            return null;
-        }
-        TracedRouteNodes traced = 
exchange.getUnitOfWork().getTracedRouteNodes();
-        RouteNode last = traced.getLastNode();
-        return last != null ? last.getLabel(exchange) : null;
+    public void setIncludeHeaders(boolean includeHeaders) {
+        dextender.setIncludeHeaders(includeHeaders);
     }
 
-    private static String extractCausedByException(Exchange exchange) {
-        Throwable cause = exchange.getException();
-        if (cause == null) {
-            cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, 
Throwable.class);
-        }
-        return (cause != null) ? cause.toString() : null;
+    public void setIncludeProperties(boolean includeProperties) {
+        dextender.setIncludeProperties(includeProperties);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/029a6df5/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DefaultExchangeExtender.java
----------------------------------------------------------------------
diff --git 
a/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DefaultExchangeExtender.java
 
b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DefaultExchangeExtender.java
new file mode 100644
index 0000000..fea3095
--- /dev/null
+++ 
b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DefaultExchangeExtender.java
@@ -0,0 +1,107 @@
+/*
+ * 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.karaf.decanter.collector.camel;
+
+import java.util.Map;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.RouteNode;
+import org.apache.camel.spi.TracedRouteNodes;
+import org.apache.camel.util.MessageHelper;
+
+/**
+ * Adds the default data from the Exchange to the data map
+ */
+public class DefaultExchangeExtender implements DecanterCamelEventExtender {
+    private boolean includeProperties = true;
+    private boolean includeHeaders = true;
+    private boolean includeBody = true;
+
+    @Override
+    public void extend(Map<String, Object> data, Exchange exchange) {
+        data.put("fromEndpointUri", exchange.getFromEndpoint() != null ? 
exchange.getFromEndpoint().getEndpointUri() : null);
+        data.put("previousNode", extractFromNode(exchange));
+        data.put("toNode", extractToNode(exchange));
+        data.put("exchangeId", exchange.getExchangeId());
+        data.put("routeId", exchange.getFromRouteId());
+        data.put("camelContextName", exchange.getContext().getName());
+        data.put("shortExchangeId", extractShortExchangeId(exchange));
+        data.put("exchangePattern", exchange.getPattern().toString());
+        if (includeProperties) {
+            data.put("properties", exchange.getProperties());
+        }
+        if (includeHeaders) {
+            data.put("inHeaders", exchange.getIn().getHeaders());
+        }
+        if (includeBody) {
+            data.put("inBody", 
MessageHelper.extractBodyAsString(exchange.getIn()));
+        }
+        data.put("inBodyType", 
MessageHelper.getBodyTypeName(exchange.getIn()));
+        if (exchange.hasOut()) {
+            if (includeHeaders) {
+                data.put("outHeaders", exchange.getOut().getHeaders());
+            }
+            if (includeBody) {
+                data.put("outBody", 
MessageHelper.extractBodyAsString(exchange.getOut()));
+            }
+            data.put("outBodyType", 
MessageHelper.getBodyTypeName(exchange.getOut()));
+        }
+        data.put("causedByException", extractCausedByException(exchange));
+    }
+    
+    private static String extractShortExchangeId(Exchange exchange) {
+        return 
exchange.getExchangeId().substring(exchange.getExchangeId().indexOf("/") + 1);
+    }
+
+    private static String extractFromNode(Exchange exchange) {
+        if (exchange.getUnitOfWork() == null) {
+            return null;
+        }
+        TracedRouteNodes traced = 
exchange.getUnitOfWork().getTracedRouteNodes();
+        RouteNode last = traced.getSecondLastNode();
+        return last != null ? last.getLabel(exchange) : null;
+    }
+
+    private static String extractToNode(Exchange exchange) {
+        if (exchange.getUnitOfWork() == null) {
+            return null;
+        }
+        TracedRouteNodes traced = 
exchange.getUnitOfWork().getTracedRouteNodes();
+        RouteNode last = traced.getLastNode();
+        return last != null ? last.getLabel(exchange) : null;
+    }
+
+    private static String extractCausedByException(Exchange exchange) {
+        Throwable cause = exchange.getException();
+        if (cause == null) {
+            cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, 
Throwable.class);
+        }
+        return (cause != null) ? cause.toString() : null;
+    }
+
+    public void setIncludeBody(boolean includeBody) {
+        this.includeBody = includeBody;
+    }
+    
+    public void setIncludeHeaders(boolean includeHeaders) {
+        this.includeHeaders = includeHeaders;
+    }
+    
+    public void setIncludeProperties(boolean includeProperties) {
+        this.includeProperties = includeProperties;
+    }
+}

Reply via email to