/** * 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.management.mbean; import java.util.Set; import org.apache.camel.CamelContext; import org.apache.camel.NoTypeConversionAvailableException; import org.apache.camel.api.management.ManagedResource; import org.apache.camel.api.management.mbean.ManagedBacklogDebuggerMBean; import org.apache.camel.processor.interceptor.BacklogDebugger; import org.apache.camel.spi.Language; import org.apache.camel.spi.ManagementStrategy; import org.apache.camel.util.ObjectHelper; @ManagedResource(description = "Managed BacklogDebugger") public class ManagedBacklogDebugger implements ManagedBacklogDebuggerMBean { private final CamelContext camelContext; private final BacklogDebugger backlogDebugger; public ManagedBacklogDebugger(CamelContext camelContext, BacklogDebugger backlogDebugger) { this.camelContext = camelContext; this.backlogDebugger = backlogDebugger; } public void init(ManagementStrategy strategy) { // do nothing } public CamelContext getContext() { return camelContext; } public BacklogDebugger getBacklogDebugger() { return backlogDebugger; } public String getCamelId() { return camelContext.getName(); } public String getCamelManagementName() { return camelContext.getManagementName(); } public String getLoggingLevel() { return backlogDebugger.getLoggingLevel(); } public void setLoggingLevel(String level) { backlogDebugger.setLoggingLevel(level); } public boolean isEnabled() { return backlogDebugger.isEnabled(); } public void enableDebugger() { backlogDebugger.enableDebugger(); } public void disableDebugger() { backlogDebugger.disableDebugger(); } public void addBreakpoint(String nodeId) { backlogDebugger.addBreakpoint(nodeId); } public void addConditionalBreakpoint(String nodeId, String language, String predicate) { backlogDebugger.addConditionalBreakpoint(nodeId, language, predicate); } public void removeBreakpoint(String nodeId) { backlogDebugger.removeBreakpoint(nodeId); } public void removeAllBreakpoints() { backlogDebugger.removeAllBreakpoints(); } public Set<String> getBreakpoints() { return backlogDebugger.getBreakpoints(); } public void resumeBreakpoint(String nodeId) { backlogDebugger.resumeBreakpoint(nodeId); } public void setMessageBodyOnBreakpoint(String nodeId, Object body) { backlogDebugger.setMessageBodyOnBreakpoint(nodeId, body); } public void setMessageBodyOnBreakpoint(String nodeId, Object body, String type) { try { Class<?> classType = camelContext.getClassResolver().resolveMandatoryClass(type); backlogDebugger.setMessageBodyOnBreakpoint(nodeId, body, classType); } catch (ClassNotFoundException e) { throw ObjectHelper.wrapRuntimeCamelException(e); } } public void removeMessageBodyOnBreakpoint(String nodeId) { backlogDebugger.removeMessageBodyOnBreakpoint(nodeId); } public void setMessageHeaderOnBreakpoint(String nodeId, String headerName, Object value) { try { backlogDebugger.setMessageHeaderOnBreakpoint(nodeId, headerName, value); } catch (NoTypeConversionAvailableException e) { throw ObjectHelper.wrapRuntimeCamelException(e); } } public void setMessageHeaderOnBreakpoint(String nodeId, String headerName, Object value, String type) { try { Class<?> classType = camelContext.getClassResolver().resolveMandatoryClass(type); backlogDebugger.setMessageHeaderOnBreakpoint(nodeId, headerName, value, classType); } catch (Exception e) { throw ObjectHelper.wrapRuntimeCamelException(e); } } public void removeMessageHeaderOnBreakpoint(String nodeId, String headerName) { backlogDebugger.removeMessageHeaderOnBreakpoint(nodeId, headerName); } public void resumeAll() { backlogDebugger.resumeAll(); } public void stepBreakpoint(String nodeId) { backlogDebugger.stepBreakpoint(nodeId); } public boolean isSingleStepMode() { return backlogDebugger.isSingleStepMode(); } public void step() { backlogDebugger.step(); } public Set<String> getSuspendedBreakpointNodeIds() { return backlogDebugger.getSuspendedBreakpointNodeIds(); } public void disableBreakpoint(String nodeId) { backlogDebugger.disableBreakpoint(nodeId); } public void enableBreakpoint(String nodeId) { backlogDebugger.enableBreakpoint(nodeId); } public int getBodyMaxChars() { return backlogDebugger.getBodyMaxChars(); } public void setBodyMaxChars(int bodyMaxChars) { backlogDebugger.setBodyMaxChars(bodyMaxChars); } public boolean isBodyIncludeStreams() { return backlogDebugger.isBodyIncludeStreams(); } public void setBodyIncludeStreams(boolean bodyIncludeStreams) { backlogDebugger.setBodyIncludeStreams(bodyIncludeStreams); } public boolean isBodyIncludeFiles() { return backlogDebugger.isBodyIncludeFiles(); } public void setBodyIncludeFiles(boolean bodyIncludeFiles) { backlogDebugger.setBodyIncludeFiles(bodyIncludeFiles); } public String dumpTracedMessagesAsXml(String nodeId) { return backlogDebugger.dumpTracedMessagesAsXml(nodeId); } public long getDebugCounter() { return backlogDebugger.getDebugCounter(); } public void resetDebugCounter() { backlogDebugger.resetDebugCounter(); } public String validateConditionalBreakpoint(String language, String predicate) { Language lan = null; try { lan = camelContext.resolveLanguage(language); lan.createPredicate(predicate); return null; } catch (Exception e) { if (lan == null) { return e.getMessage(); } else { return "Invalid syntax " + predicate + " due: " + e.getMessage(); } } } public long getFallbackTimeout() { return backlogDebugger.getFallbackTimeout(); } public void setFallbackTimeout(long fallbackTimeout) { backlogDebugger.setFallbackTimeout(fallbackTimeout); } }