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.RuntimeCamelException; 024import org.apache.camel.api.management.ManagedResource; 025import org.apache.camel.api.management.mbean.ManagedBacklogDebuggerMBean; 026import org.apache.camel.impl.debugger.BacklogDebugger; 027import org.apache.camel.spi.Language; 028import org.apache.camel.spi.ManagementStrategy; 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 @Override 054 public String getCamelId() { 055 return camelContext.getName(); 056 } 057 058 @Override 059 public String getCamelManagementName() { 060 return camelContext.getManagementName(); 061 } 062 063 @Override 064 public String getLoggingLevel() { 065 return backlogDebugger.getLoggingLevel(); 066 } 067 068 @Override 069 public void setLoggingLevel(String level) { 070 backlogDebugger.setLoggingLevel(level); 071 } 072 073 @Override 074 public boolean isEnabled() { 075 return backlogDebugger.isEnabled(); 076 } 077 078 @Override 079 public void enableDebugger() { 080 backlogDebugger.enableDebugger(); 081 } 082 083 @Override 084 public void disableDebugger() { 085 backlogDebugger.disableDebugger(); 086 } 087 088 @Override 089 public void addBreakpoint(String nodeId) { 090 backlogDebugger.addBreakpoint(nodeId); 091 } 092 093 @Override 094 public void addConditionalBreakpoint(String nodeId, String language, String predicate) { 095 backlogDebugger.addConditionalBreakpoint(nodeId, language, predicate); 096 } 097 098 @Override 099 public void removeBreakpoint(String nodeId) { 100 backlogDebugger.removeBreakpoint(nodeId); 101 } 102 103 @Override 104 public void removeAllBreakpoints() { 105 backlogDebugger.removeAllBreakpoints(); 106 } 107 108 @Override 109 public Set<String> getBreakpoints() { 110 return backlogDebugger.getBreakpoints(); 111 } 112 113 @Override 114 public void resumeBreakpoint(String nodeId) { 115 backlogDebugger.resumeBreakpoint(nodeId); 116 } 117 118 @Override 119 public void setMessageBodyOnBreakpoint(String nodeId, Object body) { 120 backlogDebugger.setMessageBodyOnBreakpoint(nodeId, body); 121 } 122 123 @Override 124 public void setMessageBodyOnBreakpoint(String nodeId, Object body, String type) { 125 try { 126 Class<?> classType = camelContext.getClassResolver().resolveMandatoryClass(type); 127 backlogDebugger.setMessageBodyOnBreakpoint(nodeId, body, classType); 128 } catch (ClassNotFoundException e) { 129 throw RuntimeCamelException.wrapRuntimeCamelException(e); 130 } 131 } 132 133 @Override 134 public void removeMessageBodyOnBreakpoint(String nodeId) { 135 backlogDebugger.removeMessageBodyOnBreakpoint(nodeId); 136 } 137 138 @Override 139 public void setMessageHeaderOnBreakpoint(String nodeId, String headerName, Object value) { 140 try { 141 backlogDebugger.setMessageHeaderOnBreakpoint(nodeId, headerName, value); 142 } catch (NoTypeConversionAvailableException e) { 143 throw RuntimeCamelException.wrapRuntimeCamelException(e); 144 } 145 } 146 147 @Override 148 public void setMessageHeaderOnBreakpoint(String nodeId, String headerName, Object value, String type) { 149 try { 150 Class<?> classType = camelContext.getClassResolver().resolveMandatoryClass(type); 151 backlogDebugger.setMessageHeaderOnBreakpoint(nodeId, headerName, value, classType); 152 } catch (Exception e) { 153 throw RuntimeCamelException.wrapRuntimeCamelException(e); 154 } 155 } 156 157 @Override 158 public void removeMessageHeaderOnBreakpoint(String nodeId, String headerName) { 159 backlogDebugger.removeMessageHeaderOnBreakpoint(nodeId, headerName); 160 } 161 162 @Override 163 public void resumeAll() { 164 backlogDebugger.resumeAll(); 165 } 166 167 @Override 168 public void stepBreakpoint(String nodeId) { 169 backlogDebugger.stepBreakpoint(nodeId); 170 } 171 172 @Override 173 public boolean isSingleStepMode() { 174 return backlogDebugger.isSingleStepMode(); 175 } 176 177 @Override 178 public void step() { 179 backlogDebugger.step(); 180 } 181 182 @Override 183 public Set<String> getSuspendedBreakpointNodeIds() { 184 return backlogDebugger.getSuspendedBreakpointNodeIds(); 185 } 186 187 @Override 188 public void disableBreakpoint(String nodeId) { 189 backlogDebugger.disableBreakpoint(nodeId); 190 } 191 192 @Override 193 public void enableBreakpoint(String nodeId) { 194 backlogDebugger.enableBreakpoint(nodeId); 195 } 196 197 @Override 198 public int getBodyMaxChars() { 199 return backlogDebugger.getBodyMaxChars(); 200 } 201 202 @Override 203 public void setBodyMaxChars(int bodyMaxChars) { 204 backlogDebugger.setBodyMaxChars(bodyMaxChars); 205 } 206 207 @Override 208 public boolean isBodyIncludeStreams() { 209 return backlogDebugger.isBodyIncludeStreams(); 210 } 211 212 @Override 213 public void setBodyIncludeStreams(boolean bodyIncludeStreams) { 214 backlogDebugger.setBodyIncludeStreams(bodyIncludeStreams); 215 } 216 217 @Override 218 public boolean isBodyIncludeFiles() { 219 return backlogDebugger.isBodyIncludeFiles(); 220 } 221 222 @Override 223 public void setBodyIncludeFiles(boolean bodyIncludeFiles) { 224 backlogDebugger.setBodyIncludeFiles(bodyIncludeFiles); 225 } 226 227 @Override 228 public String dumpTracedMessagesAsXml(String nodeId) { 229 return backlogDebugger.dumpTracedMessagesAsXml(nodeId); 230 } 231 232 @Override 233 public long getDebugCounter() { 234 return backlogDebugger.getDebugCounter(); 235 } 236 237 @Override 238 public void resetDebugCounter() { 239 backlogDebugger.resetDebugCounter(); 240 } 241 242 @Override 243 public String validateConditionalBreakpoint(String language, String predicate) { 244 Language lan = null; 245 try { 246 lan = camelContext.resolveLanguage(language); 247 lan.createPredicate(predicate); 248 return null; 249 } catch (Exception e) { 250 if (lan == null) { 251 return e.getMessage(); 252 } else { 253 return "Invalid syntax " + predicate + " due: " + e.getMessage(); 254 } 255 } 256 } 257 258 @Override 259 public long getFallbackTimeout() { 260 return backlogDebugger.getFallbackTimeout(); 261 } 262 263 @Override 264 public void setFallbackTimeout(long fallbackTimeout) { 265 backlogDebugger.setFallbackTimeout(fallbackTimeout); 266 } 267}