-
Notifications
You must be signed in to change notification settings - Fork 52
/
CamelStackFrame.java
93 lines (80 loc) · 4.14 KB
/
CamelStackFrame.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/*
* 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 com.github.cameltooling.idea.runner.debugger.stack;
import com.github.cameltooling.idea.runner.debugger.CamelDebuggerSession;
import com.github.cameltooling.idea.runner.debugger.CamelDebuggerTarget;
import com.github.cameltooling.idea.runner.debugger.evaluator.CamelExpressionEvaluator;
import com.intellij.debugger.engine.JavaStackFrame;
import com.intellij.icons.AllIcons;
import com.intellij.ui.ColoredTextContainer;
import com.intellij.ui.SimpleTextAttributes;
import com.intellij.xdebugger.XSourcePosition;
import com.intellij.xdebugger.evaluation.XDebuggerEvaluator;
import com.intellij.xdebugger.frame.XCompositeNode;
import com.intellij.xdebugger.frame.XStackFrame;
import com.intellij.xdebugger.frame.XValueChildrenList;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class CamelStackFrame extends XStackFrame {
private final CamelDebuggerSession session;
private final CamelMessageInfo camelMessageInfo;
public CamelStackFrame(@NotNull CamelDebuggerSession session, CamelMessageInfo camelMessageInfo) {
this.session = session;
this.camelMessageInfo = camelMessageInfo;
}
public CamelMessageInfo getCamelMessageInfo() {
return camelMessageInfo;
}
@Nullable
@Override
public XSourcePosition getSourcePosition() {
return this.camelMessageInfo.getXSourcePosition();
}
public void customizePresentation(@NotNull ColoredTextContainer component) {
StringBuilder nameBuilder = new StringBuilder();
nameBuilder.append(this.camelMessageInfo.getProcessor());
nameBuilder.append(" [");
nameBuilder.append("route=").append(this.camelMessageInfo.getRouteId()).append(",");
nameBuilder.append("id=").append(this.camelMessageInfo.getProcessorId()).append("]");
component.append(nameBuilder.toString(), SimpleTextAttributes.REGULAR_ATTRIBUTES);
}
@Nullable
@Override
public XDebuggerEvaluator getEvaluator() {
return new CamelExpressionEvaluator(session);
}
@Override
public Object getEqualityObject() {
return CamelStackFrame.class;
}
@Override
public void computeChildren(@NotNull XCompositeNode node) {
final XValueChildrenList children = new XValueChildrenList();
children.add("ExchangeId", new ObjectFieldDefinitionValue(this.session, this.camelMessageInfo.exchangeIdAsValue(), AllIcons.Debugger.Value));
children.add("Body", new ObjectFieldDefinitionValue(CamelDebuggerTarget.BODY, null, this.session, this.camelMessageInfo.getBody(), AllIcons.Debugger.Value));
children.add("Headers", new MapOfObjectFieldDefinitionValue(CamelDebuggerTarget.MESSAGE_HEADER, this.session, this.camelMessageInfo.getHeaders(), AllIcons.Debugger.Value));
final var properties = this.camelMessageInfo.getProperties();
if (properties != null) {
children.add("Exchange Properties", new MapOfObjectFieldDefinitionValue(CamelDebuggerTarget.EXCHANGE_PROPERTY, this.session, properties, AllIcons.Debugger.Value));
}
final var variables = this.camelMessageInfo.getVariables();
if (variables != null) {
children.add("Exchange Variables", new MapOfObjectFieldDefinitionValue(CamelDebuggerTarget.EXCHANGE_VARIABLE, this.session, variables, AllIcons.Debugger.Value));
}
node.addChildren(children, true);
}
}