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 */ 017package org.apache.camel.management.mbean; 018 019import java.util.Set; 020 021import org.apache.camel.CamelContext; 022import org.apache.camel.NoTypeConversionAvailableException; 023import org.apache.camel.api.management.ManagedResource; 024import org.apache.camel.api.management.mbean.ManagedBacklogDebuggerMBean; 025import org.apache.camel.processor.interceptor.BacklogDebugger; 026import org.apache.camel.spi.Language; 027import org.apache.camel.spi.ManagementStrategy; 028import org.apache.camel.util.ObjectHelper; 029 030@ManagedResource(description = "Managed BacklogDebugger") 031public class ManagedBacklogDebugger implements ManagedBacklogDebuggerMBean { 032 033 private final CamelContext camelContext; 034 private final BacklogDebugger backlogDebugger; 035 036 public ManagedBacklogDebugger(CamelContext camelContext, BacklogDebugger backlogDebugger) { 037 this.camelContext = camelContext; 038 this.backlogDebugger = backlogDebugger; 039 } 040 041 public void init(ManagementStrategy strategy) { 042 // do nothing 043 } 044 045 public CamelContext getContext() { 046 return camelContext; 047 } 048 049 public BacklogDebugger getBacklogDebugger() { 050 return backlogDebugger; 051 } 052 053 public String getCamelId() { 054 return camelContext.getName(); 055 } 056 057 public String getCamelManagementName() { 058 return camelContext.getManagementName(); 059 } 060 061 public String getLoggingLevel() { 062 return backlogDebugger.getLoggingLevel(); 063 } 064 065 public void setLoggingLevel(String level) { 066 backlogDebugger.setLoggingLevel(level); 067 } 068 069 public boolean isEnabled() { 070 return backlogDebugger.isEnabled(); 071 } 072 073 public void enableDebugger() { 074 backlogDebugger.enableDebugger(); 075 } 076 077 public void disableDebugger() { 078 backlogDebugger.disableDebugger(); 079 } 080 081 public void addBreakpoint(String nodeId) { 082 backlogDebugger.addBreakpoint(nodeId); 083 } 084 085 public void addConditionalBreakpoint(String nodeId, String language, String predicate) { 086 backlogDebugger.addConditionalBreakpoint(nodeId, language, predicate); 087 } 088 089 public void removeBreakpoint(String nodeId) { 090 backlogDebugger.removeBreakpoint(nodeId); 091 } 092 093 public void removeAllBreakpoints() { 094 backlogDebugger.removeAllBreakpoints(); 095 } 096 097 public Set<String> getBreakpoints() { 098 return backlogDebugger.getBreakpoints(); 099 } 100 101 public void resumeBreakpoint(String nodeId) { 102 backlogDebugger.resumeBreakpoint(nodeId); 103 } 104 105 public void setMessageBodyOnBreakpoint(String nodeId, Object body) { 106 backlogDebugger.setMessageBodyOnBreakpoint(nodeId, body); 107 } 108 109 public void setMessageBodyOnBreakpoint(String nodeId, Object body, String type) { 110 try { 111 Class<?> classType = camelContext.getClassResolver().resolveMandatoryClass(type); 112 backlogDebugger.setMessageBodyOnBreakpoint(nodeId, body, classType); 113 } catch (ClassNotFoundException e) { 114 throw ObjectHelper.wrapRuntimeCamelException(e); 115 } 116 } 117 118 public void removeMessageBodyOnBreakpoint(String nodeId) { 119 backlogDebugger.removeMessageBodyOnBreakpoint(nodeId); 120 } 121 122 public void setMessageHeaderOnBreakpoint(String nodeId, String headerName, Object value) { 123 try { 124 backlogDebugger.setMessageHeaderOnBreakpoint(nodeId, headerName, value); 125 } catch (NoTypeConversionAvailableException e) { 126 throw ObjectHelper.wrapRuntimeCamelException(e); 127 } 128 } 129 130 public void setMessageHeaderOnBreakpoint(String nodeId, String headerName, Object value, String type) { 131 try { 132 Class<?> classType = camelContext.getClassResolver().resolveMandatoryClass(type); 133 backlogDebugger.setMessageHeaderOnBreakpoint(nodeId, headerName, value, classType); 134 } catch (Exception e) { 135 throw ObjectHelper.wrapRuntimeCamelException(e); 136 } 137 } 138 139 public void removeMessageHeaderOnBreakpoint(String nodeId, String headerName) { 140 backlogDebugger.removeMessageHeaderOnBreakpoint(nodeId, headerName); 141 } 142 143 public void resumeAll() { 144 backlogDebugger.resumeAll(); 145 } 146 147 public void stepBreakpoint(String nodeId) { 148 backlogDebugger.stepBreakpoint(nodeId); 149 } 150 151 public boolean isSingleStepMode() { 152 return backlogDebugger.isSingleStepMode(); 153 } 154 155 public void step() { 156 backlogDebugger.step(); 157 } 158 159 public Set<String> getSuspendedBreakpointNodeIds() { 160 return backlogDebugger.getSuspendedBreakpointNodeIds(); 161 } 162 163 public void disableBreakpoint(String nodeId) { 164 backlogDebugger.disableBreakpoint(nodeId); 165 } 166 167 public void enableBreakpoint(String nodeId) { 168 backlogDebugger.enableBreakpoint(nodeId); 169 } 170 171 public int getBodyMaxChars() { 172 return backlogDebugger.getBodyMaxChars(); 173 } 174 175 public void setBodyMaxChars(int bodyMaxChars) { 176 backlogDebugger.setBodyMaxChars(bodyMaxChars); 177 } 178 179 public boolean isBodyIncludeStreams() { 180 return backlogDebugger.isBodyIncludeStreams(); 181 } 182 183 public void setBodyIncludeStreams(boolean bodyIncludeStreams) { 184 backlogDebugger.setBodyIncludeStreams(bodyIncludeStreams); 185 } 186 187 public boolean isBodyIncludeFiles() { 188 return backlogDebugger.isBodyIncludeFiles(); 189 } 190 191 public void setBodyIncludeFiles(boolean bodyIncludeFiles) { 192 backlogDebugger.setBodyIncludeFiles(bodyIncludeFiles); 193 } 194 195 public String dumpTracedMessagesAsXml(String nodeId) { 196 return backlogDebugger.dumpTracedMessagesAsXml(nodeId); 197 } 198 199 public long getDebugCounter() { 200 return backlogDebugger.getDebugCounter(); 201 } 202 203 public void resetDebugCounter() { 204 backlogDebugger.resetDebugCounter(); 205 } 206 207 public String validateConditionalBreakpoint(String language, String predicate) { 208 Language lan = null; 209 try { 210 lan = camelContext.resolveLanguage(language); 211 lan.createPredicate(predicate); 212 return null; 213 } catch (Exception e) { 214 if (lan == null) { 215 return e.getMessage(); 216 } else { 217 return "Invalid syntax " + predicate + " due: " + e.getMessage(); 218 } 219 } 220 } 221 222 public long getFallbackTimeout() { 223 return backlogDebugger.getFallbackTimeout(); 224 } 225 226 public void setFallbackTimeout(long fallbackTimeout) { 227 backlogDebugger.setFallbackTimeout(fallbackTimeout); 228 } 229}