001 package org.shiftone.jrat.provider.tree;
002
003
004 import org.shiftone.jrat.core.MethodKey;
005
006
007 /**
008 * This is basically a thread specific MethodHandler. The typical JRat model is
009 * to have a seperate handler for each method. This is also true for the
010 * TreeMethodHandler, however that handler delegates to an instance of this
011 * class, passing it the method key with each invocation. One instance of this
012 * class will exist for each thread that is creating JRat events. This class
013 * manipulates a tree structure as invocations are made.
014 *
015 * @author jeff@shiftone.org (Jeff Drost)
016 */
017 public class Delegate {
018
019 private TreeNode currentNode = null;
020
021 public Delegate(TreeNode rootNode) {
022
023 if (rootNode == null) {
024 throw new NullPointerException("delegate created to null initial node");
025 }
026
027 currentNode = rootNode;
028 }
029
030
031 public final void onMethodStart(MethodKey methodKey) {
032
033 currentNode = currentNode.getChild(methodKey);
034
035 currentNode.getAccumulator().onMethodStart();
036 }
037
038
039 public final void onMethodFinish(MethodKey methodKey, long duration, boolean success) {
040
041 currentNode.getAccumulator().onMethodFinish(duration, success);
042
043 currentNode = currentNode.getParentNode();
044 }
045 }